连接外部Hive Metastore Service

EMR Serverless Spark支持连接外部Hive Metastore服务,从而便捷地访问存储在Hive Metastore中的数据。本文将介绍如何在EMR Serverless Spark中配置和连接外部Hive Metastore服务,以便在工作环境中高效管理和利用数据资源。

前提条件

已创建工作空间和SQL会话,详情请参见创建工作空间管理SQL会话

使用限制

  • 使用Hive Metastore需要您重启工作空间中现有的会话。

  • 设置Hive Metastore为默认Catalog后,您的工作流任务将默认依赖于Hive Metastore。

操作流程

步骤一:准备Hive Metastore服务

说明

本文采用EMR on ECSHive Metastore作为外部服务,如果您的VPC内已经有Hive Metastore服务,则请忽略该步骤。

  1. EMR on ECS页面创建包含Hive服务,元数据内置MySQLDataLake集群,详情请参见创建集群

  2. 使用SSH方式登录集群的Master节点,详情请参见登录集群

  3. 执行以下命令,进入Hive命令行。

    hive
  4. 执行以下命令,创建一个指向OSS的表(dw_users)并写入数据。

    CREATE TABLE `dw_users`(
      `name` string)
    LOCATION
      'oss://<yourBucket>/path/to/file';
    
    INSERT INTO dw_users select 'Bob';

步骤二:新增网络连接

  1. 进入网络连接页面。

    1. 登录E-MapReduce控制台

    2. 在左侧导航栏,选择EMR Serverless > Spark

    3. Spark页面,单击目标工作空间名称。

    4. EMR Serverless Spark页面,单击左侧导航栏中的网络连接

  2. 网络连接页面,单击新增网络连接

  3. 新增网络连接对话框中,配置以下信息,单击确定

    参数

    说明

    连接名称

    输入新增连接的名称。

    专有网络

    选择与EMR集群相同的专有网络。

    交换机

    选择与EMR集群部署在同一专有网络下的相同交换机。

    状态显示为已成功时,表示新增网络连接成功。

    image

步骤三:开放Hive Metastore服务端口

  1. 获取已创建网络连接中指定交换机的网段。

    您可以登录专有网络管理控制台,在交换机页面获取交换机的网段。

    image

  2. 添加安全组规则。

    1. 登录EMR on ECS控制台

    2. EMR on ECS页面,单击目标集群的集群ID。

    3. 基础信息页面,单击集群安全组后面的链接。

    4. 安全组页面,单击增加规则,填写访问来源端口,然后单击确定

      参数

      说明

      端口

      填写9083端口。

      访问来源

      填写前一步骤中获取的指定交换机的网段。

      重要

      为防止被外部的用户攻击导致安全问题,访问来源禁止填写为0.0.0.0/0

步骤四:连接Hive Metastore

  1. EMR Serverless Spark页面,单击左侧导航栏中的数据目录

  2. 数据目录页面,单击添加数据目录

  3. 在弹出的对话框中,单击外部Hive Metastore,配置以下信息,单击确定image

    参数

    说明

    网络连接

    选择步骤二中新增的网络连接。

    Metastore服务地址

    Hive MetaStoreURI。格式为thrift://<Hive metastoreIP地址>:9083

    <Hive metastoreIP地址>HMS服务的内网IP地址。本示例为EMR集群Master节点的内网IP,您可以在EMR集群的节点管理页面中查看。

    说明

    如果HMS开启了高可用,支持填写多个节点的HMS服务地址。多个URI之间应使用“,”分隔,例如:thrift://<Hive metastoreIP地址1>:9083,thrift://<Hive metastoreIP地址2>:9083。

    Kerberos keytab 文件地址

    Kerberos keytab文件路径。

    Kerberos principal

    keytab文件中包含的Principal的名称,用于与Kerberos服务进行身份验证。您可以使用klist -kt <keytab文件>命令查看目标keytab文件中Principal的名称。

步骤五:使用Hive Metastore

  1. 数据目录页面,单击hive_metastore操作列的设为默认,设置hive_metastore为工作空间的默认数据目录。

    image

  2. 重启SQL会话。

    如果您的工作空间中已有SQL会话,您需先停止SQL会话,然后再启动SQL会话,以确保hive_metastore生效。

  3. SQL开发中查询hive_metastore表的数据。

    1. 新建SQL开发,详情请参见SparkSQL开发

    2. 执行以下命令,查询hive_metastore中的dw_users表。

      SELECT * FROM dw_users;

      image

常见问题

如何访问HDFS数据?

根据HDFS集群是否配置了高可用(HA)模式,需要采取不同的配置策略。

  • 未配置HAHDFS路径访问

    当表的location指向一个未启用高可用配置的HDFS路径时,仅需确保location中的域名可被访问。默认情况下master-1-1.<cluster-id>.<region>.emr.aliyuncs.com可以直接访问,而其他域名则需参考管理域名以添加映射关系。

  • 配置HAHDFS路径访问

    如果表的location指向的是一个启用了高可用性的HDFS路径,在配置好域名映射关系的基础上,需要在管理自定义配置文件中新建一个名为hdfs-site.xml的配置文件,并将其保存于路径/etc/spark/conf中,以确保Java RuntimeFusion Runtime能够正常访问数据。文件示例如下所示,完整内容应以EMR on ECS集群中的hdfs-site.xml为准。

    <?xml version="1.0"?>
    <configuration>
      <property>
        <name>dfs.nameservices</name>
        <value>hdfs-cluster</value>
      </property>
      <property>
        <name>dfs.ha.namenodes.hdfs-cluster</name>
        <value>nn1,nn2,nn3</value>
      </property>
      <property>
        <name>dfs.namenode.rpc-address.hdfs-cluster.nn1</name>
        <value>master-1-1.<cluster-id>.<region-id>.emr.aliyuncs.com:<port></value>
      </property>
      <property>
        <name>dfs.namenode.rpc-address.hdfs-cluster.nn2</name>
        <value>master-1-2.<cluster-id>.<region-id>.emr.aliyuncs.com:<port></value>
      </property>
      <property>
        <name>dfs.namenode.rpc-address.hdfs-cluster.nn3</name>
        <value>master-1-3.<cluster-id>.<region-id>.emr.aliyuncs.com:<port></value>
      </property>
      <property>
        <name>dfs.client.failover.proxy.provider.hdfs-cluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
      </property>
    </configuration>
  • (可选):配置开启KerberosHDFS路径访问

    如果作业需要访问开启KerberosHDFS路径,需添加spark配置spark.kerberos.access.hadoopFileSystems,具体内容以HDFS集群中的fs.defaultFS配置为准,例如HAEMR on ECS集群默认为hdfs://hdfs-cluster