本文为您介绍如何在Flink全托管模式下配置Hive Metastore、查看Hive元数据、使用Hive Metastore和删除Hive Metastore。

背景信息

您可以将Hive Metastore配置文件和Hadoop依赖存放至对象存储OSS控制台指定目录后,再在Flink全托管开发控制台上配置Hive Metastore功能。配置成功后,您就可以在Flink全托管开发控制台上直接使用DML创建业务逻辑,获取Hive中表的元数据信息,无需再使用DDL语句声明相应的表信息。Hive Metastore可以作为Stream作业和Batch作业的源表或结果表。

前提条件

  • 已在Hive Metastore侧开启了Hive Metastore服务。
    相关命令如下:
    • hive --service metastore:开启Hive Metastore服务。
    • netstat -ln | grep 9083:查询Hive Metastore服务是否已开启。

      其中9083是Hive Metastore的默认端口号。如果您在hive-site.xm配置了其他的端口号,则需要将9083改为对应的端口号。

  • 已在Hive Metastore侧配置了白名单,使得Flink全托管可以访问Hive Metastore。

    Flink全托管网段的获取方法请参见设置白名单,在Hive Metastore侧配置白名单的方法请参见添加安全组规则

  • 已授予VVP和Flink用户对hive.metastore.warehouse.dir配置的目录的读权限,其中hive.metastore.warehouse.dir的目录请在hive-site.xml中查看。
  • 如果Hive Metastore Catalog中存在外部表,需要授予VVP和Flink用户对每张外部表的数据目录的读权限。

    您可以通过show create table ${tableName}命令来查看外部表的数据目录,LOCATION字段中的内容即为外部表的数据目录。

注意事项

使用Hive Metastore功能需要注意以下几点:
  • 支持自建Hive Metastore。
  • VVP 2.3.0及以上版本支持Hive Metastore,支持的版本情况具体如下:
    • VVP 2.3.0版本仅支持Hive Metastore 2.3.6版本。
    • VVP 2.3.0以上版本支持Hive Metastore 2.2.0~2.3.7版本。
  • Hive Metastore不支持Kerberos鉴权。
    说明 不开启kerberos鉴权时,在VVP端访问Hive的默认用户名为vvp,在Flink集群中访问Hive的默认用户名为flink。因此您要保证vvp和flink这两个用户都有访问Hive元数据和文件系统(例如HDFS)上的Hive表数据的权限。
  • 一个Flink全托管实例仅支持一个Hive Metastore,多项目无法设置多Hive Metastore。
  • Hive Metastore只读,即您不能通过Flink全托管开发控制台在Hive中创建物理表。

配置Hive Metastore服务

  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 Metastore功能的Flink全托管项目名称。
      ${hms} 您在Flink全托管上显示的Hive Metastore名称。
      说明 开通Flink全托管服务后,系统会自动在您指定的Bucket下创建/artifacts/namespaces/${ns}/目录来存储JAR包等数据。如果您在OSS控制台没有看到如上目录,则需要在Flink全托管开发控制台的资源管理页面,手动上传一个文件来触发目录创建。
    6. oss://${bucket}/artifacts/namespaces/${ns}/${hms}路径下,新建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-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解析记录
    8. 将您的以下配置文件上传到hadoop-conf-dir目录。上传文件的操作请参见上传文件
      • hive-site.xml
      • core-site.xml
      • hdfs-site.xml
      • mapred-site.xml
      • 其他文件,例如Hive作业使用的压缩包。
  3. 在Flink全托管开发控制台上配置Hive Metastore服务。
    1. 登录实时计算控制台
    2. Flink全托管页签,单击目标工作空间操作列下的开发控制台
    3. 在左侧导航栏,单击作业开发
    4. 在页面左上角,单击新建,文件类型选择SQL。
    5. 在文本编辑区域,输入创建Hive Metastore的命令。
      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 Metastore名称。
      type Connector类型,固定值为hive。
      default-database 默认数据库名称。
      hive-version Hive Metastore版本号。
      说明 Flink全托管兼容的Hive Metastore版本为2.2.0~2.3.7hive-version的配置情况如下:
      • 如果Hive Metastore版本为2.0.0~2.2.0,则hive-version需要指定为2.2.0
      • 如果Hive Metastore版本为2.3.0~2.3.7,则hive-version需要指定为2.3.6
      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 Metastore服务配置完成后,您就可以在作业中引用Hive Metastore表信息,作为结果表和维表,无需声明表的DDL。Hive Metastore表名称格式为${hive-catlog-name}.${hive-db-name}.${hive-table-name}

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

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

查看Hive元数据

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

使用Hive Metastore

  • 从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 Metastore服务

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