本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
配置Hive Catalog后,您可以在Flink開發控制臺直接讀取Hive元數據,無需再手動注冊Hive表,提高作業開發的效率且保證數據的正確性。本文為您介紹如何配置Hive元數據、創建和使用Hive Catalog等。
背景信息
您可以將Hive Catalog配置文件和Hadoop依賴存放至對象存儲OSS控制臺指定目錄后,再在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。如果您未開通阿里云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。
實時計算引擎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,則請參見如何訪問跨VPC的其他服務?
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
阿里云對象存儲OSS的域名。
詳情請參見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方式
進入元數據管理頁面。
登錄實時計算控制臺,單擊目標工作空間操作列下的控制臺。
單擊元數據管理。
單擊創建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方式
進入元數據管理頁面。
登錄實時計算控制臺,單擊目標工作空間操作列下的控制臺。
單擊元數據管理。
單擊目標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方式
進入元數據管理頁面。
登錄實時計算控制臺,單擊目標工作空間操作列下的控制臺。
單擊元數據管理。
在元數據列表中依次單擊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方式
進入元數據管理頁面。
登錄實時計算控制臺,單擊目標工作空間操作列下的控制臺。
單擊元數據管理。
在Catalog列表頁面,單擊目標Catalog名稱對應操作列的刪除。
在彈出的提示頁面中,單擊刪除。
左側元數據區域下,查看目標Catalog是否已刪除。
SQL命令方式
在數據查詢文本編輯區域,輸入以下命令。
DROP CATALOG ${HMS Name};
其中,HMS Name為您要刪除的在Flink開發控制臺上顯示的Hive Catalog名稱。
選中刪除Catalog的命令,鼠標右鍵選擇運行。
在左側元數據區域,查看目標Catalog是否已刪除。