配置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。
使用限制
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是否已删除。