Hive数据源

更新时间:2025-02-08 06:16:57

云数据库 SelectDB 版支持联邦查询,能够快速集成数据湖、数据库、远端文件等外部数据源,为您提供简便而高效的数据分析体验。本文介绍SelectDB如何使用Catalog集成Hive数据源,对Hive数据源进行联邦分析。

前提条件

  • 确保Hive集群所有节点和SelectDB实例的网络处于互通状态。

  • 如果您的Hive是基于HDFS构建的,确保HDFS开放了以下端口,用于HiveSelectDB之间的传输数据。

    • hive.metastore.uris中指定的端口,默认为9083。

    • dfs.namenode.rpc-address中指定的端口,默认为8020。

    • dfs.datanode.address中指定的端口,默认为9866。

  • 了解什么是Catalog,以及Catalog的基本操作。更多详情,请参见湖仓一体

注意事项

  • 支持Hive1、Hive2、Hive3版本。

  • 支持Managed Table、External Table以及部分Hive View。

  • 支持识别Hive Metastore中存储的Hive、Iceberg、Hudi元数据。

  • 目前,云数据库 SelectDB 版External Catalog中的数据只支持读操作。

示例环境

本示例以Linux系统为例,在SelectDB中,使用联邦技术查询基于HDFS构建的Hivetest_db.test_t数据。在实际使用中,请根据您的系统和使用环境修改对应参数。示例环境如下:

  • 业务场景:非HA

  • 源数据Hive的构建类型:HDFS

  • 源数据库:test_db

  • 源数据表:test_t

源数据准备

  1. 登录目标源数据Hive。

  2. 创建数据库testdb。

    CREATE database if NOT EXISTS test_db;
  3. 创建表Hive_t。

    CREATE TABLE IF NOT EXISTS test_t (
        id INT,
        name STRING,
        age INT
    );
  4. 插入数据。

    -- 插入数据
    INSERT INTO TABLE test_t VALUES
    (1, 'Alice', 25),
    (2, 'Bob', 30),
    (3, 'Charlie', 35),
    (4, 'David', 40),
    (5, 'Eve', 45);

操作步骤

步骤一:连接实例

连接SelectDB实例。具体操作,请参见通过MySQL客户端连接云数据库SelectDB版实例

步骤二:集成Hive

SelectDB通过创建External Catalog集成外部数据源,不同的业务场景,Catalog的配置参数不同,根据您的业务场景,选择合适的语法以及参数配置。

创建Catalog后,云数据库 SelectDB 版会自动同步数据目录的数据库和表。针对不同的数据目录和数据表格式,云数据库 SelectDB 版会进行列与列之间的关系映射。如果您还不清楚HiveSelectDB的列映射关系,请参见下述列类型映射章节。

Hive基于HDFS构建
Hive基于阿里云OSS构建
语法
CREATE CATALOG <catalog_name> PROPERTIES (
    'type'='<type>',
    'hive.metastore.uris' = '<hive.metastore.uris>',
    'hadoop.username' = '<hadoop.username>',
    'dfs.nameservices'='<hadoop.username>',
    'dfs.ha.namenodes.your-nameservice'='<dfs.ha.namenodes.your-nameservice>',
    'dfs.namenode.rpc-address.your-nameservice.nn1'='<dfs.namenode.rpc-address.your-nameservice.nn1>',
    'dfs.namenode.rpc-address.your-nameservice.nn2'='<dfs.namenode.rpc-address.your-nameservice.nn2>',
    'dfs.client.failover.proxy.provider.your-nameservice'='<dfs.client.failover.proxy.provider.your-nameservice>'
);
参数说明
非HA场景
HA场景

参数

必选

说明

catalog_name

Catalog的名称。

type

Catalog类型。固定填写hms。

hive.metastore.uris

Hive MetaStoreURI。

  • 格式为thrift://<Hive MetaStoreIP地址>:<端口号>

  • 端口号默认为9083。

  • 可通过SET hive.metastore.urisHive终端执行获取。

参数

必选

说明

catalog_name

Catalog的名称。

type

Catalog类型。固定填写hms。

hive.metastore.uris

Hive MetaStoreURI。

  • 格式为thrift://<Hive MetaStoreIP地址>:<端口号>

  • 端口号默认为9083。

  • 可通过SET hive.metastore.urisHive终端执行获取。

hadoop.username

HDFS用户名。

dfs.nameservices

Name Service名称,与已有Hive环境依赖的hdfs-site.xml配置文件里dfs.nameservices的值保持一致。

dfs.ha.namenodes.[nameservice ID]

NameNodeID列表,与已有Hive环境依赖的hdfs-site.xml配置文件里的相应配置项的值保持一致。

dfs.namenode.rpc-address.[nameservice ID].[name node ID]

NameNodeRPC地址,数量与NameNode数量相同,与已有Hive环境依赖的hdfs-site.xml配置文件里的相应配置项的值保持一致。

dfs.client.failover.proxy.provider.[nameservice ID]

HDFS客户端连接活跃NameNodeJava类,通常是org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

HA场景示例
CREATE CATALOG hive_catalog PROPERTIES (
    'type'='hms',
    'hive.metastore.uris' = 'thrift://master-1-1.c-7fa25a1a****.cn-hangzhou.emr.aliyuncs.com:9083'
);
语法

此处语法同Hive基于HDFS构建一致,只是必选参数不同。

参数说明

参数

必选

说明

type

Catalog类型。固定填写hms。

hive.metastore.uris

Hive MetaStoreURI。

  • 格式为thrift://<Hive MetaStoreIP地址>:<端口号>

  • 端口号默认为9083。

  • 可通过SET hive.metastore.urisHive终端执行获取。

oss.endpoint

访问OSS数据的Endpoint。如何获取,请参见OSS地域和访问域名

oss.access_key

访问OSS数据的Accesskey ID

oss.secret_key

访问OSS数据的AccessKey Secret

示例

CREATE CATALOG hive_catalog PROPERTIES (
    "type"="hms",
    "hive.metastore.uris" = "thrift://172.0.0.1:9083",
    "oss.endpoint" = "oss-cn-beijing.aliyuncs.com",
    "oss.access_key" = "ak",
    "oss.secret_key" = "sk"
);

步骤三:查看Catalog

您可以通过以下语句,查看Catalog创建是否成功。

SHOW CATALOGS; --查看CATALOG是否创建成功
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
| CatalogId    | CatalogName  | Type     | IsCurrent | CreateTime              | LastUpdateTime      | Comment                |
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
| 436009309195 | hive_catalog | hms      |           | 2024-07-19 17:09:08.058 | 2024-07-19 18:04:37 |                        |
|            0 | internal     | internal | yes       | UNRECORDED              | NULL                | Doris internal catalog |
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+

步骤四:查看Hive库表数据

  • 在目标External Catalog目录下查看Hive库表数据。

    说明

    连接SelectDB实例后,默认操作目录为Internal Catalog。

    1. 切换目录至目标External Catalog。

      SWITCH hive_catalog;
    2. 查看数据。

      完成目标目录切换后,您可以像使用Internal Catalog一样,对External Catalog的数据进行查看和访问。例如以下操作:

      • 查看数据库列表:SHOW DATABASES;

      • 切换数据库:USE test_db;

      • 查看数据库表列表:SHOW TABLES;

      • 查看表数据:SELECT * FROM test_t;

  • Internal Catalog目录下查看Iceberg库表数据。

    --查看hive_catalog目录下,数据库test_db中表test_t的数据。
    SELECT * FROM hive_catalog.test_db.test_t;

更多操作:迁移数据

完成数据源集成后,如果你需要将Hive的历史数据迁移至SelectDB中,您可通过内联语法进行历史数据迁移,具体操作,请参见Insert Into

列类型映射

说明
  • 以下HMS Type适用于Hive、IcebergHudi。

  • 以下部分复杂结构的HMS TypeSelectDB Type支持嵌套

    • array<type>:嵌套示例:array<map<string, int>>

    • map<KeyType, ValueType>:嵌套示例:map<string, array<int>>

    • struct<col1: Type1, col2: Type2, ...>:嵌套示例:struct<col1: array<int>, col2: map<int, date>>

HMS Type

SelectDB Type

HMS Type

SelectDB Type

boolean

boolean

tinyint

tinyint

smallint

smallint

int

int

bigint

bigint

date

date

timestamp

datetime

float

float

double

double

char

char

varchar

varchar

decimal

decimal

array<type>

array<type>

map<KeyType, ValueType>

map<KeyType, ValueType>

struct<col1: Type1, col2: Type2, ...>

struct<col1: Type1, col2: Type2, ...>

other

unsupported

  • 本页导读 (1)
  • 前提条件
  • 注意事项
  • 示例环境
  • 源数据准备
  • 操作步骤
  • 步骤一:连接实例
  • 步骤二:集成Hive
  • 步骤三:查看Catalog
  • 步骤四:查看Hive库表数据
  • 更多操作:迁移数据
  • 列类型映射
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等