管理Hive Catalog

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

配置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。

    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元数据

  1. 连通Hadoop集群和Flink的VPC。

    您可以使用云解析PrivateZone产品连通Hadoop集群和Flink的VPC,详情请参见解析器(Resolver)。网络连通后,Flink就可以使用Hadoop集群的配置文件访问Hadoop集群。

  2. 在OSS控制台新建目录,并将Hive配置文件和Hadoop依赖上传至目标路径。

    1. 登录OSS管理控制台

    2. 单击Bucket列表

    3. 单击目标Bucket名称。

    4. 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开发控制台的资源管理页面,手动上传一个文件来触发目录创建。

    5. 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链接信息。

    6. 将您的Hive配置文件(hive-site.xml)上传到hive-conf-dir目录下。上传文件的操作请参见上传文件

      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的域名。

        详情请参见访问域名和数据中心

        hive.metastore.warehouse.dir

        表数据存放的路径。

        无。

        fs.defaultFS

        表数据默认存放的文件系统。

        如果是写OSS-HDFS,请确保该值为目标Bucket对应HDFS服务的域名,例如oss://oss-hdfs-bucket.cn-hangzhou.oss-dls.aliyuncs.com/

    7. 将以下配置文件上传到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方式

  1. 进入元数据管理页面。

    1. 登录实时计算控制台,单击目标工作空间操作列下的控制台

    2. 单击元数据管理

  2. 单击创建Catalog,在创建Catalog页面,选择Hive后,单击下一步

  3. 填写参数配置信息。

    重要

    Catalog创建完成后,以下配置信息都不支持修改。如果需要修改,需要删除掉已创建的Catalog,重新进行创建。

    image

    参数

    说明

    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

    存放Hive配置文件的目录。您需要提前手动创建hive-conf-dir的目录,详情请参见配置Hive元数据

    hadoop-conf-dir

    存放Hadoop依赖的目录。您需要提前手动创建hadoop-conf-dir的目录,详情请参见配置Hive元数据

  4. 单击确定。

  5. 在左侧元数据区域,查看创建的Catalog。

SQL方式

  1. 查询脚本文本编辑区域,输入以下命令。

    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元数据

  2. 选中创建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方式

  1. 进入元数据管理页面。

    1. 登录实时计算控制台,单击目标工作空间操作列下的控制台

    2. 单击元数据管理

  2. 单击目标Catalog名称对应操作列的查看

  3. 单击目标数据库名称对应操作列的查看

  4. 单击创建表

  5. 使用内置连接器连接页签,选择连接器后,单击下一步

  6. 填写建表语句并配置相关参数信息。代码示例如下。

    CREATE TABLE `${catalog_name}`.`${db_name}`.`${table_name}` (
      id INT,
      name STRING
    ) WITH (
      'connector' = 'hive'
    );
  7. 单击确定

SQL命令方式

  1. 查询脚本文本编辑区域,输入以下命令。

    CREATE TABLE `${catalog_name}`.`${db_name}`.`${table_name}` (
      id INT,
      name STRING
    ) WITH (
      'connector' = 'hive'
    );
  2. 选中建表语句,单击左侧代码行数上的运行

image

示例如下:

-- 在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方式

  1. 进入元数据管理页面。

    1. 登录实时计算控制台,单击目标工作空间操作列下的控制台

    2. 单击元数据管理

  2. 元数据列表中依次单击Catalog名称、数据库名称、表名称。

  3. 在表详情页面,单击删除表

  4. 在删除对话框中,单击确定

SQL命令方式

查询脚本文本编辑区域,输入以下命令。

-- 删除HIVE表。
DROP TABLE `${catalog_name}`.`${db_name}`.`${table_name}`;

示例如下:

-- 删除HIVE表。
DROP TABLE `flinkexporthive`.`flinkhive`.`flink_hive_test`;

查看Hive Catalog

  1. 进入元数据管理页面。

    1. 登录实时计算控制台

    2. 单击目标工作空间操作列下的控制台

    3. 单击元数据管理

  2. Catalog列表页面,查看Catalog名称类型

    说明

    如果您需要查看Catalog下的数据库和表,请单击操作列下的查看

删除Hive Catalog

警告

删除Hive Catalog不会影响已运行的作业,但对未上线或者需要暂停恢复的作业,均产生影响,请您谨慎操作。

UI方式

  1. 进入元数据管理页面。

    1. 登录实时计算控制台,单击目标工作空间操作列下的控制台

    2. 单击元数据管理

  2. Catalog列表页面,单击目标Catalog名称对应操作列的删除

  3. 在弹出的提示页面中,单击删除

  4. 左侧元数据区域下,查看目标Catalog是否已删除。

SQL命令方式

  1. 查询脚本文本编辑区域,输入以下命令。

    DROP CATALOG ${HMS Name};

    其中,HMS Name为您要删除的在Flink开发控制台上显示的Hive Catalog名称。

  2. 选中删除Catalog的命令,鼠标右键选择运行

  3. 在左侧元数据区域,查看目标Catalog是否已删除。