Hologres從V2.2版本開始,支持通過Hive Metastore訪問存儲于OSS上的數據湖數據,如您使用EMR集群構建了基于OSS的數據湖環境,可通過簡單配置實現Hologres加速讀寫OSS和OSS-HDFS數據。
前提條件
已開通OSS服務。具體操作,請參見控制臺快速入門。
已創建EMR數據湖集群并構建測試數據。具體操作,請參見創建集群。Hologres支持的EMR集群需滿足以下條件:
Hive為3.1.3及以上版本。
未開啟Kerberos身份認證。
元數據選擇自建RDS或者內置MySQL。
已購買Hologres實例并開啟數據湖加速,然后登錄Hologres實例并創建數據庫。具體操作,請參見購買Hologres和創建數據庫。
說明開啟數據湖加速方式:訪問Hologres實例列表,單擊目標實例操作列中的數據湖加速并確認,開啟數據湖加速功能。
已完成網絡打通。
您需要先提交網絡打通申請(網絡打通申請鏈接請參見網絡打通申請)。收到您的申請后,阿里云Hologres技術支持人員會聯系并協助您完成以下操作,從而實現網絡互通:
登錄專有網絡管理控制臺創建反向終端節點,具體操作請參見創建反向終端節點。終端節點服務選擇其他終端節點服務,然后輸入EMR集群所在地域的終端節點服務的名稱。各地域終端節點服務名稱如下。
地域
終端節點服務名稱
北京
com.aliyuncs.privatelink.cn-beijing.epsrv-2zeokrydzjd6kx3cbwmb
上海
com.aliyuncs.privatelink.cn-shanghai.epsrv-uf61fvlfwta7f7dv9n3x
張家口
com.aliyuncs.privatelink.cn-zhangjiakou.epsrv-8vbno4k4wwvys0eg2swp
說明如您所在地域未提供終端節點服務名稱,Hologres會在您提交網絡打通申請后為您創建并提供反饋。
專有網絡VPC(Virtual Private Cloud)是基于阿里云構建的一個隔離的網絡環境,VPC網絡之間、VPC網絡與傳統經典網絡之間邏輯上徹底隔離,默認無法進行互訪。Hologres服務先于VPC網絡存在,部署在經典網絡里,因此需要通過配置反向終端節點來實現網絡聯通。
當前網絡配置是通過IP來進行連接,當EMR集群IP發生變化后,需要重新配置。
限制條件
Hologres只讀從實例暫不支持開啟數據湖加速功能。
不支持對外部表執行
UPDATE
、DELETE
及TRUNCATE
等操作。暫不支持通過Auto Load方式映射來自HMS的外部表。
暫不支持開啟了Kerberos身份認證的Hive集群。
操作步驟
執行SQL命令,創建EXTENSION。
創建EXTENSION需要Superuser權限,該操作針對整個DB生效,一個DB只需執行一次。
CREATE EXTENSION IF NOT EXISTS hive_fdw;
基于
hive_fdw
創建Foreign Server(外部服務器)并配置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' );
參數
是否必填
說明
示例值
server_name
是
自定義Foreign Server名稱。
hive_server
hive_metastore_uris
是
Hive MetaStore的URI。格式為
thrift://<Hive metastore的IP地址>:<端口號>
,端口號默認為9083。說明您可以登錄E-MapReduce控制臺,單擊目標集群操作列中的節點管理。在節點管理頁簽,獲取master節點的內網 IP,內網IP即Hive metastore的IP地址。
thrift://172.16.0.250:9083
oss_endpoint
是
OSS的Endpoint地址。您可以根據自己實際業務選擇:
原生OSS存儲:為獲得更好的訪問性能,推薦使用OSS的內網Endpoint。
OSS-HDFS存儲:目前僅支持內網訪問。
說明您可以登錄OSS管理控制臺,進入Bucket文件的概覽頁面,在訪問端口區域,獲取OSS的Endpoint地址。
OSS
oss-cn-shanghai-internal.aliyuncs.com
OSS-HDFS
<bucket_name>.cn-beijing.oss-dls.aliyuncs.com
(可選)創建用戶映射。
Hologres支持通過
CREATE USER MAPPING
來指定其他用戶身份訪問特定的Foreign Server。例如:Foreign Server的Owner可以通過CREATE USER MAPPING
指定RAM用戶(123xxx)來訪問OSS外部數據。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' );
示例如下。
--為當前用戶創建用戶映射 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創建用戶映射 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>;
創建外部表。
Hologres支持以下命令創建外部表:
CREATE FOREIGN TABLE:一次僅創建一張外部表,但支持通過指定部分列來自定義創建外部表,適用于需要創建的外部表較少且無需映射所有外部表字段的情況。
IMPORT FOREIGN SCHEMA:批量創建外部表,適用于需要創建多張外部表或者外部數據源批量映射的場景。
說明Hologres支持讀取OSS中的分區表,并且支持將TEXT、VARCHAR和INT作為分區鍵的數據類型。使用CREATE FOREIGN TABLE方式時,由于只進行字段映射而不實際存儲數據,只需要將分區字段作為普通字段來創建即可;而使用IMPORT FOREIGN SCHEMA方式時,則無需關心表字段,系統會自動處理表字段映射。
如果OSS外部表存在和Hologres內部表同名的表,IMPORT FOREIGN SCHEMA會跳過該外部表的創建。建議使用CREATE FOREIGN TABLE來定義一個非重復表名來創建。
-- 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' );
查詢外部表。
創建外部表成功后,可以直接查詢外部表讀取OSS中的數據。
非分區表
SELECT * FROM <holo_schema>.<hive_table>;
分區表
SELECT * FROM <holo_schema>.<hive_partition_table> WHERE <partition_key> = '<partition_value>';