Hive數(shù)據(jù)源
云數(shù)據(jù)庫(kù) SelectDB 版支持聯(lián)邦查詢(xún),能夠快速集成數(shù)據(jù)湖、數(shù)據(jù)庫(kù)、遠(yuǎn)端文件等外部數(shù)據(jù)源,為您提供簡(jiǎn)便而高效的數(shù)據(jù)分析體驗(yàn)。本文介紹SelectDB如何使用Catalog集成Hive數(shù)據(jù)源,對(duì)Hive數(shù)據(jù)源進(jìn)行聯(lián)邦分析。
前提條件
已將Hive集群所有節(jié)點(diǎn)IP添加至SelectDB的白名單。具體操作,請(qǐng)參見(jiàn)設(shè)置白名單。
如果您的Hive是基于HDFS構(gòu)建的,確保HDFS開(kāi)放了以下端口,用于Hive與SelectDB之間的傳輸數(shù)據(jù)。
hive.metastore.uris
中指定的端口,默認(rèn)為9083。dfs.namenode.rpc-address
中指定的端口,默認(rèn)為8020。dfs.datanode.address
中指定的端口,默認(rèn)為9866。
了解什么是Catalog,以及Catalog的基本操作。更多詳情,請(qǐng)參見(jiàn)湖倉(cāng)一體。
注意事項(xiàng)
支持Hive1、Hive2、Hive3版本。
支持Managed Table、External Table以及部分Hive View。
支持識(shí)別Hive Metastore中存儲(chǔ)的Hive、Iceberg、Hudi元數(shù)據(jù)。
目前,云數(shù)據(jù)庫(kù) SelectDB 版對(duì)External Catalog中的數(shù)據(jù)只支持讀操作。
示例環(huán)境
本示例以L(fǎng)inux系統(tǒng)為例,在SelectDB中,使用聯(lián)邦技術(shù)查詢(xún)基于HDFS構(gòu)建的Hive中test_db.test_t數(shù)據(jù)。在實(shí)際使用中,請(qǐng)根據(jù)您的系統(tǒng)和使用環(huán)境修改對(duì)應(yīng)參數(shù)。示例環(huán)境如下:
業(yè)務(wù)場(chǎng)景:非HA
源數(shù)據(jù)Hive的構(gòu)建類(lèi)型:HDFS
源數(shù)據(jù)庫(kù):test_db
源數(shù)據(jù)表:test_t
源數(shù)據(jù)準(zhǔn)備
登錄目標(biāo)源數(shù)據(jù)Hive。
創(chuàng)建數(shù)據(jù)庫(kù)testdb。
CREATE database if NOT EXISTS test_db;
創(chuàng)建表Hive_t。
CREATE TABLE IF NOT EXISTS test_t ( id INT, name STRING, age INT );
插入數(shù)據(jù)。
-- 插入數(shù)據(jù) INSERT INTO TABLE test_t VALUES (1, 'Alice', 25), (2, 'Bob', 30), (3, 'Charlie', 35), (4, 'David', 40), (5, 'Eve', 45);
操作步驟
步驟一:連接實(shí)例
連接SelectDB實(shí)例。具體操作,請(qǐng)參見(jiàn)通過(guò)MySQL客戶(hù)端連接云數(shù)據(jù)庫(kù)SelectDB版實(shí)例。
步驟二:集成Hive
SelectDB通過(guò)創(chuàng)建External Catalog集成外部數(shù)據(jù)源,不同的業(yè)務(wù)場(chǎng)景,Catalog的配置參數(shù)不同,根據(jù)您的業(yè)務(wù)場(chǎng)景,選擇合適的語(yǔ)法以及參數(shù)配置。
創(chuàng)建Catalog后,云數(shù)據(jù)庫(kù) SelectDB 版會(huì)自動(dòng)同步數(shù)據(jù)目錄的數(shù)據(jù)庫(kù)和表。針對(duì)不同的數(shù)據(jù)目錄和數(shù)據(jù)表格式,云數(shù)據(jù)庫(kù) SelectDB 版會(huì)進(jìn)行列與列之間的關(guān)系映射。如果您還不清楚Hive與SelectDB的列映射關(guān)系,請(qǐng)參見(jiàn)下述列類(lèi)型映射章節(jié)。
Hive基于HDFS構(gòu)建
語(yǔ)法
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>'
);
參數(shù)說(shuō)明
非HA場(chǎng)景
參數(shù) | 必選 | 說(shuō)明 |
catalog_name | 是 | Catalog的名稱(chēng)。 |
type | 是 | Catalog類(lèi)型。固定填寫(xiě)hms。 |
hive.metastore.uris | 是 | Hive MetaStore的URI。
|
HA場(chǎng)景
參數(shù) | 必選 | 說(shuō)明 |
catalog_name | 是 | Catalog的名稱(chēng)。 |
type | 是 | Catalog類(lèi)型。固定填寫(xiě)hms。 |
hive.metastore.uris | 是 | Hive MetaStore的URI。
|
hadoop.username | 否 | HDFS用戶(hù)名。 |
dfs.nameservices | 否 | Name Service名稱(chēng),與已有Hive環(huán)境依賴(lài)的hdfs-site.xml配置文件里dfs.nameservices的值保持一致。 |
dfs.ha.namenodes.[nameservice ID] | 否 | NameNode的ID列表,與已有Hive環(huán)境依賴(lài)的hdfs-site.xml配置文件里的相應(yīng)配置項(xiàng)的值保持一致。 |
dfs.namenode.rpc-address.[nameservice ID].[name node ID] | 否 | NameNode的RPC地址,數(shù)量與NameNode數(shù)量相同,與已有Hive環(huán)境依賴(lài)的hdfs-site.xml配置文件里的相應(yīng)配置項(xiàng)的值保持一致。 |
dfs.client.failover.proxy.provider.[nameservice ID] | 否 | HDFS客戶(hù)端連接活躍NameNode的Java類(lèi),通常是 |
非HA場(chǎng)景示例
CREATE CATALOG hive_catalog PROPERTIES (
'type'='hms',
'hive.metastore.uris' = 'thrift://master-1-1.c-7fa25a1a****.cn-hangzhou.emr.aliyuncs.com:9083'
);
Hive基于阿里云OSS構(gòu)建
語(yǔ)法
此處語(yǔ)法同Hive基于HDFS構(gòu)建一致,只是必選參數(shù)不同。
參數(shù)說(shuō)明
參數(shù) | 必選 | 說(shuō)明 |
type | 是 | Catalog類(lèi)型。固定填寫(xiě)hms。 |
hive.metastore.uris | 是 | Hive MetaStore的URI。
|
oss.endpoint | 是 | 訪(fǎng)問(wèn)OSS數(shù)據(jù)的 |
oss.access_key | 是 | 訪(fǎng)問(wèn)OSS數(shù)據(jù)的 |
oss.secret_key | 是 | 訪(fǎng)問(wèn)OSS數(shù)據(jù)的 |
示例
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
您可以通過(guò)以下語(yǔ)句,查看Catalog創(chuàng)建是否成功。
SHOW CATALOGS; --查看CATALOG是否創(chuàng)建成功
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
| 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庫(kù)表數(shù)據(jù)
在目標(biāo)External Catalog目錄下查看Hive庫(kù)表數(shù)據(jù)。
說(shuō)明連接SelectDB實(shí)例后,默認(rèn)操作目錄為Internal Catalog。
切換目錄至目標(biāo)External Catalog。
SWITCH hive_catalog;
查看數(shù)據(jù)。
完成目標(biāo)目錄切換后,您可以像使用Internal Catalog一樣,對(duì)External Catalog的數(shù)據(jù)進(jìn)行查看和訪(fǎng)問(wèn)。例如以下操作:
查看數(shù)據(jù)庫(kù)列表:
SHOW DATABASES;
切換數(shù)據(jù)庫(kù):
USE test_db;
查看數(shù)據(jù)庫(kù)表列表:
SHOW TABLES;
查看表數(shù)據(jù):
SELECT * FROM test_t;
在Internal Catalog目錄下查看Iceberg庫(kù)表數(shù)據(jù)。
--查看hive_catalog目錄下,數(shù)據(jù)庫(kù)test_db中表test_t的數(shù)據(jù)。 SELECT * FROM hive_catalog.test_db.test_t;
更多操作:遷移數(shù)據(jù)
完成數(shù)據(jù)源集成后,如果你需要將Hive的歷史數(shù)據(jù)遷移至SelectDB中,您可通過(guò)內(nèi)聯(lián)語(yǔ)法進(jìn)行歷史數(shù)據(jù)遷移,具體操作,請(qǐng)參見(jiàn)Insert Into。
列類(lèi)型映射
以下HMS Type適用于Hive、Iceberg和Hudi。
以下部分復(fù)雜結(jié)構(gòu)的HMS Type和SelectDB 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 |
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 |