本文为您介绍如何在Flink全托管模式下配置Hive Catalog、查看Hive元数据、使用Hive Catalog和删除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 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

    已开通阿里云DLF。如果您未开通阿里云DLF,请在数据湖构建控制台页面,单击免费开通数据湖构建

使用限制

  • Flink全托管仅支持Hive 2.1.0~2.3.9,3.1.0 ~ 3.1.3版本。在创建Hive Catalog时,hive-version取值填写详情如下:
    • 对于Hive 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 Metastore不支持Kerberos鉴权。
  • 支持自建Hive Metastore。
  • 实时计算引擎VVR 4.0.11及以上版本支持DLF作为Hive Catalog的元数据管理中心。
    说明 如果Hive版本为3.1.0+,对于VVR 6.0.1及以上版本,则暂不支持DLF作为Hive Catalog的元数据管理中心。
  • 如果Hive Catalog是以DLF作为元数据管理中心,则不支持在该Catalog中创建非Hive表。

配置Hive Catalog

  1. 连通Hadoop集群和Flink全托管的VPC。
    您可以使用云解析PrivateZone产品连通Hadoop集群和Flink全托管的VPC,详情请参见解析器(Resolver)。网络连通后,Flink全托管就可以使用Hadoop集群的配置文件访问Hadoop集群。
  2. 在OSS控制台新建目录,并将Hive配置文件和Hadoop依赖上传至目标路径。
    1. 登录OSS管理控制台
    2. 在左侧导航栏,单击Bucket列表
    3. 单击目标Bucket名称。
    4. 在左侧导航栏,单击文件管理
    5. oss://${bucket}/artifacts/namespaces/${ns}/路径下,新建${hms}目录。
      在OSS上创建目录的操作详情,请参见创建目录。目标路径中的变量含义如下表所示:
      目录 说明
      ${bucket} 您Flink全托管实例使用的Bucket名称。
      ${ns} 您要使用Hive Catalog功能的Flink全托管项目名称。
      ${hms} 您在Flink全托管上显示的Hive Catalog名称。
      说明 开通Flink全托管服务后,系统会自动在您指定的Bucket下创建/artifacts/namespaces/${ns}/目录来存储JAR包等数据。如果您在OSS控制台没有看到如上目录,则需要在Flink全托管开发控制台的资源管理页面,手动上传一个文件来触发目录创建。
    6. oss://${bucket}/artifacts/namespaces/${ns}/${hms}路径下,新建hive-conf-dir和hadoop-conf-dir目录。
      其中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上新建目录的操作详情,请参见创建目录。创建成功后,您可以在左侧导航栏的资源上传页面中,查看新建的目录及文件,并复制OSS链接信息。

    7. 将您的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,则需要配置域名解析服务。否则VVP远程访问Hive时,hive.metastore.uris参数值会被解析失败并报错UnknownHostException。配置域名解析服务详情请参见添加PrivateZone解析记录
      • 阿里云DLF
        需要在配置文件hive-site.xml中添加如下配置项,以便Hive Catalog可以访问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>
        其中涉及的参数解释如下表所示。
        参数 说明 备注
        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 表数据存放的路径。 无。
    8. 将您的以下配置文件上传到hadoop-conf-dir目录。上传文件的操作请参见上传文件
      • hive-site.xml
      • core-site.xml
      • hdfs-site.xml
      • mapred-site.xml
      • 其他文件,例如Hive作业使用的压缩包。
  3. 在Flink全托管开发控制台上配置Hive Catalog。
    1. 登录实时计算控制台
    2. Flink全托管页签,单击目标工作空间操作列下的控制台
    3. 在左侧导航栏,单击作业开发
    4. 在页面左上角,单击新建,文件类型选择SQL。
    5. 在文本编辑区域,输入创建Hive Catalog的命令。
      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.1.0~2.3.9,3.1.0 ~ 3.1.3版本。在创建Hive Catalog时,hive-version取值填写详情如下:
      • 对于Hive 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配置文件的目录。目录为oss://${bucket}/artifacts/namespaces/${ns}/${hms}/hive-conf-dir/
      hadoop-conf-dir 存放Hadoop依赖的目录。目录为oss://${bucket}/artifacts/namespaces/${ns}/${hms}/hadoop-conf-dir/
    6. 单击执行
      Hive Catalog配置完成后,您就可以在作业中引用Hive Catalog表信息,作为结果表和维表,无需声明表的DDL。Hive Catalog表名称格式为${hive-catalog-name}.${hive-db-name}.${hive-table-name}

      此外,如果您想停用Hive Catalog服务,详情请参见删除Hive Catalog

    7. 在左侧,单击Schemas页签。
    8. 单击刷新图标,刷新查看新建的Hive Catalog。
      刷新

使用Hive Catalog

  • 创建Hive表。
    CREATE TABLE t1(
     id INT,
     name STRING
    ) WITH (
     'connector' = 'hive'
    );
  • 从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 Catalog

  1. 登录实时计算管理控制台
  2. Flink全托管页签,单击目标工作空间操作列下的控制台
  3. 在左侧导航栏,单击作业开发
  4. 单击Schemas页签。
  5. 在顶部菜单栏下拉框中,切换到目标Hive Catalog。
    Hive
  6. Tables列查看不同数据库下的表和字段信息。

删除Hive Catalog

  1. 登录实时计算控制台
  2. Flink全托管页签,单击目标工作空间操作列下的控制台
  3. 在左侧导航栏,单击作业开发
  4. 在页面左上角,单击新建,文件类型选择SQL。
  5. 在文本编辑区域,输入以下命令。
    DROP CATALOG ${HMS Name}
    其中,HMS Name为您要删除的在Flink全托管开发控制台上显示的Hive Catalog名称。
    注意 删除Hive Catalog不会影响已运行的作业,但对未上线或者作业需要暂停恢复的作业,均产生影响,请您谨慎操作。
  6. 单击执行
  7. 在左侧,单击Schemas页签。
  8. 单击刷新图标,刷新查看新建的Hive Catalog是否已被删除。
    刷新