全部產品
Search
文件中心

E-MapReduce:串連外部Hive Metastore Service

更新時間:Sep 26, 2025

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 ECS的Hive Metastore作為外部服務,如果您的VPC內已經有Hive Metastore服務,則請忽略該步驟。

  1. 在EMR on ECS頁面建立包含Hive服務,中繼資料內建MySQL的DataLake叢集,詳情請參見建立叢集

  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 MetaStore的URI。格式為thrift://<Hive metastore的IP地址>:9083

    <Hive metastore的IP地址>為HMS服務的內網IP地址。本樣本為EMR叢集Master節點的內網IP,您可以在EMR叢集的節點管理頁面中查看。

    說明

    如果HMS開啟了高可用,支援填寫多個節點的HMS服務地址。多個URI之間應使用“,”分隔,例如:thrift://<Hive metastore的IP地址1>:9083,thrift://<Hive metastore的IP地址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)模式,需要採取不同的配置策略。

  • 未配置HA的HDFS路徑訪問

    當表的location指向一個未啟用高可用配置的HDFS路徑時,僅需確保location中的網域名稱可被訪問。預設情況下master-1-1.<cluster-id>.<region>.emr.aliyuncs.com可以直接存取,而其他網域名稱則需參考管理網域名稱以添加映射關係。

  • 配置HA的HDFS路徑訪問

    如果表的location指向的是一個啟用了高可用性的HDFS路徑,在配置好網域名稱映射關係的基礎上,需要在管理自訂設定檔中建立一個名為hdfs-site.xml的設定檔,並將其儲存於路徑/etc/spark/conf中,以確保Java Runtime或Fusion 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>
  • (可選):配置開啟Kerberos的HDFS路徑訪問

    如果作業需要訪問開啟Kerberos的HDFS路徑,需添加spark配置spark.kerberos.access.hadoopFileSystems,具體內容以HDFS叢集中的fs.defaultFS配置為準,例如HA的EMR on ECS叢集預設為hdfs://hdfs-cluster