基于Hive Metastore訪問OSS數(shù)據(jù)湖數(shù)據(jù)(Beta)
Hologres從V2.2版本開始,支持通過Hive Metastore訪問存儲于OSS上的數(shù)據(jù)湖數(shù)據(jù),如您使用EMR集群構(gòu)建了基于OSS的數(shù)據(jù)湖環(huán)境,可通過簡單配置實(shí)現(xiàn)Hologres加速讀寫OSS和OSS-HDFS數(shù)據(jù)。
前提條件
已開通OSS服務(wù)。具體操作,請參見控制臺快速入門。
已創(chuàng)建EMR數(shù)據(jù)湖集群并構(gòu)建測試數(shù)據(jù)。具體操作,請參見創(chuàng)建集群。Hologres支持的EMR集群需滿足以下條件:
Hive為3.1.3及以上版本。
未開啟Kerberos身份認(rèn)證。
元數(shù)據(jù)選擇自建RDS或者內(nèi)置MySQL。
已購買Hologres實(shí)例并開啟數(shù)據(jù)湖加速,然后登錄Hologres實(shí)例并創(chuàng)建數(shù)據(jù)庫。具體操作,請參見購買Hologres和創(chuàng)建數(shù)據(jù)庫。
說明開啟數(shù)據(jù)湖加速方式:訪問Hologres實(shí)例列表,單擊目標(biāo)實(shí)例操作列中的數(shù)據(jù)湖加速并確認(rèn),開啟數(shù)據(jù)湖加速功能。
已提交網(wǎng)絡(luò)打通申請,阿里云Hologres技術(shù)支持人員會協(xié)助您創(chuàng)建反向終端節(jié)點(diǎn),打通網(wǎng)絡(luò)。網(wǎng)絡(luò)打通申請鏈接,請參見網(wǎng)絡(luò)打通申請。
說明當(dāng)前網(wǎng)絡(luò)配置是通過IP來進(jìn)行連接,當(dāng)EMR集群IP發(fā)生變化后,需要重新配置。
限制條件
Hologres只讀從實(shí)例暫不支持開啟數(shù)據(jù)湖加速功能。
不支持對外部表執(zhí)行
UPDATE
、DELETE
及TRUNCATE
等操作。暫不支持通過Auto Load方式映射來自HMS的外部表。
暫不支持開啟了Kerberos身份認(rèn)證的Hive集群。
操作步驟
執(zhí)行SQL命令,創(chuàng)建EXTENSION。
創(chuàng)建EXTENSION需要Superuser權(quán)限,該操作針對整個DB生效,一個DB只需執(zhí)行一次。
CREATE EXTENSION IF NOT EXISTS hive_fdw;
基于
hive_fdw
創(chuàng)建Foreign Server(外部服務(wù)器)并配置Endpoint信息。CREATE SERVER IF NOT EXISTS <server_name> FOREIGN DATA WRAPPER hive_fdw OPTIONS ( hive_metastore_uris 'thrift://<Hive metastore的IP地址>:<端口號>', oss_endpoint 'oss-<nation>-<region>-internal.aliyuncs.com | <bucket>.oss-<nation>-<region>.oss-dls.aliyuncs.com' );
參數(shù)
是否必填
說明
示例值
server_name
是
自定義Foreign Server名稱。
hive_server
hive_metastore_uris
是
Hive MetaStore的URI。格式為
thrift://<Hive metastore的IP地址>:<端口號>
,端口號默認(rèn)為9083。說明您可以登錄E-MapReduce控制臺,單擊目標(biāo)集群操作列中的節(jié)點(diǎn)管理。在節(jié)點(diǎn)管理頁簽,獲取master節(jié)點(diǎn)的內(nèi)網(wǎng) IP,內(nèi)網(wǎng)IP即Hive metastore的IP地址。
thrift://172.16.0.250:9083
oss_endpoint
是
OSS的Endpoint地址。您可以根據(jù)自己實(shí)際業(yè)務(wù)選擇:
原生OSS存儲:為獲得更好的訪問性能,推薦使用OSS的內(nèi)網(wǎng)Endpoint。
OSS-HDFS存儲:目前僅支持內(nèi)網(wǎng)訪問。
說明您可以登錄OSS管理控制臺,進(jìn)入Bucket文件的概覽頁面,在訪問端口區(qū)域,獲取OSS的Endpoint地址。
OSS
oss-cn-shanghai-internal.aliyuncs.com
OSS-HDFS
<bucket_name>.cn-beijing.oss-dls.aliyuncs.com
(可選)創(chuàng)建用戶映射。
Hologres支持通過
CREATE USER MAPPING
來指定其他用戶身份訪問特定的Foreign Server。例如:Foreign Server的Owner可以通過CREATE USER MAPPING
指定RAM用戶(123xxx)來訪問OSS外部數(shù)據(jù)。CREATE USER MAPPING
詳情,請參見postgres create user mapping。CREATE USER mapping FOR <賬號> server <server_name> options ( dlf_access_id 'accessid', dlf_access_key 'accesskey', oss_access_id 'accessid', oss_access_key 'accesskey' );
示例如下。
--為當(dāng)前用戶創(chuàng)建用戶映射 CREATE USER mapping FOR current_user server <server_name> options ( dlf_access_id 'LTAI5txxx', dlf_access_key 'y8LUUyyy', oss_access_id 'LTAI5txxx', oss_access_key 'y8LUUyyy' ); --為RAM用戶123xxx創(chuàng)建用戶映射 CREATE USER mapping FOR "p4_123xxx" server <server_name> options ( dlf_access_id 'LIlY5txxx', dlf_access_key 'KsjkXKyyy', oss_access_id 'LIlY5txxx', oss_access_key 'KsjkXKyyy' ); --刪除用戶映射 Drop USER MAPPING FOR CURRENT_USER server <server_name>; Drop USER MAPPING FOR "p4_123xxx" server <server_name>;
創(chuàng)建外部表。
Hologres支持以下命令創(chuàng)建外部表:
CREATE FOREIGN TABLE:一次僅創(chuàng)建一張外部表,但支持通過指定部分列來自定義創(chuàng)建外部表,適用于需要創(chuàng)建的外部表較少且無需映射所有外部表字段的情況。
IMPORT FOREIGN SCHEMA:批量創(chuàng)建外部表,適用于需要創(chuàng)建多張外部表或者外部數(shù)據(jù)源批量映射的場景。
說明Hologres支持讀取OSS中的分區(qū)表,并且支持將TEXT、VARCHAR和INT作為分區(qū)鍵的數(shù)據(jù)類型。使用CREATE FOREIGN TABLE方式時,由于只進(jìn)行字段映射而不實(shí)際存儲數(shù)據(jù),只需要將分區(qū)字段作為普通字段來創(chuàng)建即可;而使用IMPORT FOREIGN SCHEMA方式時,則無需關(guān)心表字段,系統(tǒng)會自動處理表字段映射。
如果OSS外部表存在和Hologres內(nèi)部表同名的表,IMPORT FOREIGN SCHEMA會跳過該外部表的創(chuàng)建。建議使用CREATE FOREIGN TABLE來定義一個非重復(fù)表名來創(chuàng)建。
-- CREATE FOREIGN TABLE方式 CREATE FOREIGN TABLE <holo_schema_name>.<table_name> ( { column_name data_type } [, ... ] ] ) ) SERVER <hive_server_name> OPTIONS ( schema_name '<ext_db_name>', table_name '<ext_table_name>' ); -- IMPORT FOREIGN SCHEMA方式 IMPORT FOREIGN SCHEMA <ext_db_name> [ { limit TO | EXCEPT } ( table_name [, ...] ) ] FROM server <hive_server_name> INTO <holo_schema_name> options( if_table_exist 'update', if_unsupported_type 'error' );
查詢外部表。
創(chuàng)建外部表成功后,可以直接查詢外部表讀取OSS中的數(shù)據(jù)。
非分區(qū)表
SELECT * FROM <holo_schema>.<hive_table>;
分區(qū)表
SELECT * FROM <holo_schema>.<hive_partition_table> WHERE <partition_key> = '<partition_value>';