配置Hive Catalog後,您可以在Flink開發控制台直接讀取Hive中繼資料,無需再手動註冊Hive表,提高作業開發的效率且保證資料的正確性。本文為您介紹如何配置Hive中繼資料、建立和使用Hive Catalog等。
背景資訊
您可以將Hive Catalog設定檔和Hadoop依賴存放至Object Storage Service控制台指定目錄後,再在Flink開發控制台上配置Hive Catalog功能。配置成功後,可在Flink開發控制台上直接使用DML建立商務邏輯,擷取Hive中表的中繼資料資訊,無需再使用DDL語句聲明相應的表資訊。Hive Catalog中的表可以作為流作業和批作業的源表或結果表。
Flink支援Hive MetaStore和阿里雲資料湖構建(Data Lake Formation,簡稱DLF)作為Hive Catalog的中繼資料中心。本文將從以下方面為您介紹如何管理Hive Catalog:
前提條件
在使用Hive MetaStore或阿里雲DLF作為Hive Catalog中繼資料中心前,需要完成以下配置:
使用Hive MetaStore作為Hive Catalog中繼資料中心
要求
說明
已在Hive Metastore側開啟了Hive Metastore服務。
相關命令如下:
開啟Hive Metastore服務命令:
hive --service metastore
查詢Hive Metastore服務是否已開啟:
netstat -ln | grep 9083
其中9083是Hive Metastore的預設連接埠號碼。如果您在hive-site.xml配置了其他的連接埠號碼,則需要將9083改為對應的連接埠號碼。
已在Hive Metastore側配置了白名單,使得Flink可以訪問Hive Metastore。
使用阿里雲DLF作為Hive Catalog中繼資料中心
已開通阿里雲DLF。
使用限制
Hive Metastore不支援Kerberos鑒權。
支援自建Hive Metastore。
由於從Flink社區從1.16版本開始廢棄了對Hive 1.x,2.1.x,2.2.x版本的支援,所以僅VVR 6.x 版本支援Hive 1.x,2.1.x,2.2.x。
Realtime Compute引擎VVR 4.0.11及以上版本支援DLF作為Hive Catalog的中繼資料管理中心。
說明如果Hive版本為3.1.0+,對於VVR 6.0.x版本,只有 VVR 6.0.7及以上版本才支援DLF作為Hive Catalog的中繼資料管理中心。
如果Hive Catalog是以DLF作為中繼資料管理中心,則僅計算引擎VVR 8.0.6及以上版本支援在該Catalog中建立非Hive表。
僅VVR 8.0.6及以上版本才支援寫入OSS-HDFS。
配置Hive中繼資料
連通Hadoop叢集和Flink的VPC。
您可以使用雲解析PrivateZone產品連通Hadoop叢集和Flink的VPC,詳情請參見解析器(Resolver)。網路連通後,Flink就可以使用Hadoop叢集的設定檔訪問Hadoop叢集。
Hive Catalog支援Hive MetaStore和阿里雲DLF作為中繼資料管理中心,相關配置說明詳情如下:
Hive MetaStore
需要檢查設定檔hive-site.xml中hive.metastore.uris參數配置是否符合下列要求。
<property> <name>hive.metastore.uris</name> <value>thrift://xx.yy.zz.mm:9083</value> <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description> </property>
其中
xx.yy.zz.mm
為Hive的內網IP或者公網IP。說明如果您將hive.metastore.uris填寫為hostname,則需要佈建網域名解析服務。否則Flink開發控制台遠端存取Hive時,hive.metastore.uris參數值會被解析失敗並報錯
UnknownHostException
。佈建網域名解析服務詳情請參見添加PrivateZone解析記錄。阿里雲DLF
需要在設定檔hive-site.xml中添加如下配置項,以便Hive Catalog可以訪問DLF。
說明如果您的hive-site.xml包含了dlf.catalog.akMode的配置項,則需要將該配置項刪掉,否則將無法訪問DLF。
<property> <name>hive.imetastoreclient.factory.class</name> <value>com.aliyun.datalake.metastore.hive2.DlfMetaStoreClientFactory</value> </property> <property> <name>dlf.catalog.uid</name> <value>${YOUR_DLF_CATALOG_UID}</value> </property> <property> <name>dlf.catalog.endpoint</name> <value>${YOUR_DLF_ENDPOINT}</value> </property> <property> <name>dlf.catalog.region</name> <value>${YOUR_DLF_CATALOG_REGION}</value> </property> <property> <name>dlf.catalog.accessKeyId</name> <value>${YOUR_ACCESS_KEY_ID}</value> </property> <property> <name>dlf.catalog.accessKeySecret</name> <value>${YOUR_ACCESS_KEY_SECRET}</value> </property>
如果您的Hive表被儲存在OSS中,則還需要添加如下配置。
<property> <name>fs.oss.impl.disable.cache</name> <value>true</value> </property> <property> <name>fs.oss.impl</name> <value>org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem</value> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>${YOUR_OSS_WAREHOUSE_DIR}</value> </property> <property> <name>fs.oss.endpoint</name> <value>${YOUR_OSS_ENDPOINT}</value> </property> <property> <name>fs.oss.accessKeyId</name> <value>${YOUR_ACCESS_KEY_ID}</value> </property> <property> <name>fs.oss.accessKeySecret</name> <value>${YOUR_ACCESS_KEY_SECRET}</value> </property> <property> <name>fs.defaultFS</name> <value>oss://${YOUR_OSS_BUCKET_DOMIN}</value> </property>
如果您的Hive表被儲存在OSS-HDFS中,則還需要添加如下配置。
<property> <name>fs.jindo.impl</name> <value>com.aliyun.jindodata.jindo.JindoFileSystem</value> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>${YOUR_OSS_WAREHOUSE_DIR}</value> </property> <property> <name>fs.oss.endpoint</name> <value>${YOUR_OSS_ENDPOINT}</value> </property> <property> <name>fs.oss.accessKeyId</name> <value>${YOUR_ACCESS_KEY_ID}</value> </property> <property> <name>fs.oss.accessKeySecret</name> <value>${YOUR_ACCESS_KEY_SECRET}</value> </property> <property> <name>fs.defaultFS</name> <value>oss://${YOUR_OSS_HDFS_BUCKET_DOMIN}</value> </property>
其中涉及的參數解釋如下表所示。
參數
說明
備忘
dlf.catalog.uid
阿里雲帳號的帳號ID。
帳號資訊,請通過使用者資訊頁面擷取。
dlf.catalog.endpoint
DLF服務的Endpoint。
詳情請參見已開通的地區和訪問網域名稱。
說明推薦您為dlf.endpoint參數配置DLF的VPC Endpoint。例如,如果您選擇的地區為cn-hangzhou地區,則dlf.endpoint參數需要配置為dlf-vpc.cn-hangzhou.aliyuncs.com。
如果您需要跨VPC訪問DLF,則請參見空間管理與操作
dlf.catalog.region
DLF服務的地區名。
詳情請參見已開通的地區和訪問網域名稱。
說明請和dlf.endpoint選擇的地區保持一致。
dlf.catalog.accessKeyIdfs.oss.accessKeyId
阿里雲帳號的Access Key。
擷取方法請參見擷取AccessKey。
dlf.catalog.accessKeySecretfs.oss.accessKeySecret
阿里雲帳號的Access Secret。
擷取方法請參見擷取AccessKey。
fs.oss.endpoint
阿里雲Object Storage Service的網域名稱。
詳情請參見OSS地區和訪問網域名稱。
hive.metastore.warehouse.dir
表資料存放的路徑。
無。
fs.defaultFS
表資料預設存放的檔案系統。
如果是寫OSS-HDFS,請確保該值為目標Bucket對應HDFS服務的網域名稱,例如
oss://oss-hdfs-bucket.cn-hangzhou.oss-dls.aliyuncs.com/
。說明Flink全託管儲存使用者,此步驟後無需進行下列操作,可以直接跳轉到建立Hive Catalog操作。
在OSS控制台建立目錄,並將Hive設定檔和Hadoop依賴上傳至目標路徑。
登入OSS管理主控台。
單擊Bucket列表。
單擊目標Bucket名稱。
在oss://${bucket}/artifacts/namespaces/${ns}/路徑下,建立${hms}目錄。
在OSS上建立目錄的操作詳情,請參見建立目錄。目標路徑中的變數含義如下表所示:
目錄
說明
${bucket}
您Flink使用的Bucket名稱。
${ns}
您要使用Hive Catalog功能的Flink專案空間名稱。
${hms}
建議與下文建立的Hive Catalog名稱保持一致。
說明開通Flink工作空間後,系統會自動在您指定的Bucket下建立/artifacts/namespaces/${ns}/目錄來儲存JAR包等資料。如果您在OSS控制台沒有看到如上目錄,則需要在Flink開發控制台的資源管理頁面,手動上傳一個檔案來觸發目錄建立。
在oss://${bucket}/artifacts/namespaces/${ns}/${hms}路徑下,建立hive-conf-dir和hadoop-conf-dir目錄。在OSS上建立目錄的操作請參見建立目錄
其中hive-conf-dir和hadoop-conf-dir目錄中存放的檔案詳情如下:
oss://${bucket}/artifacts/namespaces/${ns}/${hms}/hive-conf-dir/用於存放Hive設定檔hive-site.xml。
oss://${bucket}/artifacts/namespaces/${ns}/${hms}/hadoop-conf-dir/用於存放Hadoop設定檔,包括core-site.xml、hdfs-site.xml、yarn-site.xml和mapred-site.xml。
建立成功後,您可以在檔案清單頁面中,查看建立的目錄及檔案,並複製OSS連結資訊。
將您的Hive設定檔(hive-site.xml)上傳到hive-conf-dir目錄下。上傳檔案的操作請參見上傳檔案。
將以下設定檔上傳到hadoop-conf-dir目錄。上傳檔案的操作請參見上傳檔案。
hive-site.xml
core-site.xml
hdfs-site.xml
mapred-site.xml
其他檔案,例如Hive作業使用的壓縮包。
建立Hive Catalog
完成前面的Hive中繼資料配置後,您可以建立Hive Catalog,支援UI與SQL命令兩種方式配置Hive Catalog,推薦使用UI方式配置Hive Catalog。
UI方式
進入中繼資料管理頁面。
登入Realtime Compute控制台,單擊目標工作空間操作列下的控制台。
單擊中繼資料管理。
單擊建立Catalog,在建立Catalog頁面,選擇Hive後,單擊下一步。
填寫參數配置資訊。
重要Catalog建立完成後,以下配置資訊都不支援修改。如果需要修改,需要刪除掉已建立的Catalog,重新進行建立。
參數
說明
catalog name
Hive Catalog名稱。
hive-version
Hive Metastore版本號碼。
Flink僅支援Hive 2.0.0~2.3.9,3.1.0 ~ 3.1.3版本。在建立Hive Catalog時,hive-version取值填寫詳情如下:
對於Hive 2.0.x、2.1.x版本,hive-version需要指定為2.2.0。
對於Hive 2.2.x、2.3.x、3.1.x版本,hive-version需要分別指定為2.2.0、2.3.6、3.1.2。
default-database
預設資料庫名稱。
hive-conf-dir
OSS儲存:存放Hive設定檔的目錄。您需要提前手動建立hive-conf-dir的目錄,詳情請參見配置Hive中繼資料。
全託管儲存:根據控制台提示上傳對應檔案。
hadoop-conf-dir
OSS儲存:存放Hadoop依賴的目錄。您需要提前手動建立hadoop-conf-dir的目錄,詳情請參見配置Hive中繼資料。
全託管儲存:根據控制台提示上傳對應檔案。
單擊確定。
在左側中繼資料地區,查看建立的Catalog。
SQL方式
在資料查詢文本編輯地區,輸入以下命令。
CREATE CATALOG ${HMS Name} WITH ( 'type' = 'hive', 'default-database' = 'default', 'hive-version' = '<hive-version>', 'hive-conf-dir' = '<hive-conf-dir>', 'hadoop-conf-dir' = '<hadoop-conf-dir>' );
參數
說明
${HMS Name}
Hive Catalog名稱。
type
Connector類型,固定值為hive。
default-database
預設資料庫名稱。
hive-version
Hive Metastore版本號碼。
Flink僅支援Hive 2.0.0~2.3.9,3.1.0 ~ 3.1.3版本。在建立Hive Catalog時,hive-version取值填寫詳情如下:
對於Hive 2.0.x、2.1.x版本,hive-version需要指定為2.2.0。
對於Hive 2.2.x、2.3.x、3.1.x版本,hive-version需要分別指定為2.2.0、2.3.6、3.1.2。
hive-conf-dir
存放Hive設定檔的目錄。您需要提前手動建立hive-conf-dir的目錄,詳情請參見配置Hive中繼資料。
hadoop-conf-dir
存放Hadoop依賴的目錄。您需要提前手動建立hadoop-conf-dir的目錄,詳情請參見配置Hive中繼資料。
選中建立Catalog的代碼後,單擊左側程式碼數上的運行。
Hive Catalog配置完成後,您就可以在作業中引用Hive Catalog表資訊,作為結果表和維表,無需聲明表的DDL。Hive Catalog表名稱格式為${hive-catalog-name}.${hive-db-name}.${hive-table-name}。
此外,如果您想停用Hive Catalog服務,詳情請參見刪除Hive Catalog。
使用Hive Catalog
建立Hive表
UI方式
進入中繼資料管理頁面。
登入Realtime Compute控制台,單擊目標工作空間操作列下的控制台。
單擊中繼資料管理。
單擊目標Catalog名稱對應操作列的查看。
單擊目標資料庫名稱對應操作列的查看。
單擊建立表。
在使用內建連接器串連頁簽,選擇連接器後,單擊下一步。
填寫建表語句並配置相關參數資訊。程式碼範例如下。
CREATE TABLE `${catalog_name}`.`${db_name}`.`${table_name}` ( id INT, name STRING ) WITH ( 'connector' = 'hive' );
單擊確定。
SQL命令方式
在資料查詢文本編輯地區,輸入以下命令。
CREATE TABLE `${catalog_name}`.`${db_name}`.`${table_name}` ( id INT, name STRING ) WITH ( 'connector' = 'hive' );
選中建表語句,單擊左側程式碼數上的運行。
樣本如下:
-- 在Catalog flinkexporthive下的flinkhive資料庫中建立表格flink_hive_test。
CREATE TABLE `flinkexporthive`.`flinkhive`.`flink_hive_test` (
id INT,
name STRING
) WITH (
'connector' = 'hive'
);
修改Hive表
在資料查詢文本編輯地區,輸入以下命令。
-- HIVE表增加欄位。
ALTER TABLE `${catalog_name}`.`${db_name}`.`${table_name}`
ADD column type-column;
-- HIVE表刪除欄位。
ALTER TABLE `${catalog_name}`.`${db_name}`.`${table_name}`
DROP column;
樣本如下:
-- HIVE表增加欄位color。
ALTER TABLE `flinkexporthive`.`flinkhive`.`flink_hive_test`
ADD color STRING;
-- HIVE表刪除欄位color。
ALTER TABLE `flinkexporthive`.`flinkhive`.`flink_hive_test`
DROP color;
從Hive表中讀取資料
INSERT INTO ${other_sink_table}
SELECT ...
FROM `${catalog_name}`.`${db_name}`.`${table_name}`;
寫入結果資料至Hive表
INSERT INTO `${catalog_name}`.`${db_name}`.`${table_name}`
SELECT ...
FROM ${other_source_table};
刪除Hive表
UI方式
進入中繼資料管理頁面。
登入Realtime Compute控制台,單擊目標工作空間操作列下的控制台。
單擊中繼資料管理。
在中繼資料列表中依次單擊Catalog名稱、資料庫名稱、表名稱。
在表詳情頁面,單擊刪除表。
在刪除對話方塊中,單擊確定。
SQL命令方式
在資料查詢文本編輯地區,輸入以下命令。
-- 刪除HIVE表。
DROP TABLE `${catalog_name}`.`${db_name}`.`${table_name}`;
樣本如下:
-- 刪除HIVE表。
DROP TABLE `flinkexporthive`.`flinkhive`.`flink_hive_test`;
查看Hive Catalog
進入中繼資料管理頁面。
單擊目標工作空間操作列下的控制台。
單擊中繼資料管理。
在Catalog列表頁面,查看Catalog名稱和類型。
說明如果您需要查看Catalog下的資料庫和表,請單擊操作列下的查看。
刪除Hive Catalog
刪除Hive Catalog不會影響已啟動並執行作業,但對未上線或者需要暫停恢複的作業均會產生影響,請您謹慎操作。
UI方式
進入中繼資料管理頁面。
登入Realtime Compute控制台,單擊目標工作空間操作列下的控制台。
單擊中繼資料管理。
在Catalog列表頁面,單擊目標Catalog名稱對應操作列的刪除。
在彈出的提示頁面中,單擊刪除。
左側中繼資料地區下,查看目標Catalog是否已刪除。
SQL命令方式
在資料查詢文本編輯地區,輸入以下命令。
DROP CATALOG ${HMS Name};
其中,HMS Name為您要刪除的在Flink開發控制台上顯示的Hive Catalog名稱。
選中刪除Catalog的命令,滑鼠右鍵選擇運行。
在左側中繼資料地區,查看目標Catalog是否已刪除。