全部產品
Search
文件中心

MaxCompute:Hive+HDFS外部模式

更新時間:Mar 25, 2026

MaxCompute 推出Hive+HDFS類型的外部Schema,通過映射EMR或標準開源形態的Hadoop,支援即時擷取中繼資料與資料的即時訪問。database層級映射Hive執行個體,MaxCompute可以讀取Hive的資料,但不能使用Hadoop的計算能力。

功能介紹

Hive是常見的開源巨量資料的資料倉儲解決方案,中繼資料大多儲存在HMS中,資料大多儲存在HDFS上。MaxCompute支援建立此類型的外部資料源。通過MaxCompute與Hive的聯邦,可以實現資料倉儲訪問、匯聚開源巨量資料系統資料的能力。

Hive+HDFS類型Schema暫不支援Kerberos認證,只支援免認證方式的執行個體,通過外部資料源串連的Hadoop執行個體。在MaxCompute中,則通過MaxCompute許可權體系基於對象名稱管理外部Schema內使用者使用映射的資料對象。

適用範圍

  • 僅華東1(杭州)、華東2(上海)、華北2(北京)、華北3(張家口)、華南1(深圳)、中國香港、新加坡和德國(法蘭克福)地區支援構建湖倉一體2.0能力。

  • Hive版本支援2.x,支援3.x相容2.x的能力。

  • Hive+HDFS模式的SQL後付費聯邦計算任務在公測期間暫不收費。

  • 如果Hive+HDFS外部資料源是在E-MapReduce執行個體上,目前只支援自建RDS作為中繼資料,不支援DLF統一中繼資料和內建MySQL;且在讀取資料前需要確認E-MapReduce執行個體的Hive組件是正常啟動並執行。

操作步驟

步驟一:準備測試資料

如已有Hive資料,可忽略此步驟。

  1. 開通E-MapReduce服務。MaxCompute與Hadoop叢集所在的VPC必須部署在同一地區。

  2. 準備Hive測試資料

    1. 登入E-MapReduce控制台,在左上方選擇地區。

    2. 我的集群首頁面,單擊创建集群

      1. 软件配置

        在頂部功能表列處,根據實際情況選擇資源群組。資源群組預設顯示帳號全部資源。其他配置參數如下:

        參數名

        說明

        地域

        • 建立的叢集會在對應的地區內,一旦建立便無法修改。

        • MaxCompute與Hadoop叢集所在的VPC必須部署在同一地區

        业务场景

        本樣本中選擇自定义集群

        产品版本

        根據需求選擇,推薦使用最新版本。

        服务高可用

        預設不開啟。開啟服务高可用開關後,EMR會把Master節點分布在不同的底層硬體上以降低故障風險。

        可选服务(至少一项)

        本文實踐選擇HADOOP-COMMON(3.2.1)HDFS(3.2.1)HIVE(3.1.3)以及YARN(3.2.1)

        允许采集服务运行日志

        預設開啟採集。

        如果您有采集需求,可以在集群信息中,修改服务运行日志采集状态。

        元数据

        本樣本中使用自建 RDS

        雲上建立RDS步驟參見建立RDS MySQL執行個體與設定資料庫

        • 用于生产环境的集群,建议使用 独立 RDS MySQL,可以选择使用阿里云高可用版本的 RDS MySQL 5.7

        • 填寫RDS串連資訊hivemetastore-site.xml

          • javax.jdo.option.ConnectionURL

            JDBC中繼資料串連,例如:jdbc:mysql://rds.host.name/hive_db_name

          • javax.jdo.option.ConnectionUserName

            中繼資料的資料庫帳號名。

          • javax.jdo.option.ConnectionPassword

            中繼資料的資料庫密碼。

        上述配置僅適用於本文實踐,關於通過E-MapReduce控制台建立分析叢集的詳細操作請參見快速建立和使用資料湖分析叢集

      2. 硬件配置

        參數名

        說明

        付费类型

        • 包年包月

        • 按量付费

        在測試情境下,建議使用按量付费,測試正常後可以釋放該叢集,再建立一個包年包月的生產叢集正式使用。

        可用区

        叢集建立後,無法直接更改可用性區域,請謹慎選擇。

        专有网络

        選擇對應地區下的專用網路。如果沒有,單擊建立VPC前往建立。建立專用網路完成後,單擊重新整理,可以選擇剛建立的VPC。

        交换机

        選擇在對應專用網路下可用性區域的交換器,如果在這個可用性區域沒有可用的交換器,則需要新建立一個。

        默认安全组

        重要

        不支援使用ECS上建立的企業安全性群組。

        如果已有在使用的安全性群組,可以直接選擇使用或建立安全性群組。

        节点组

        根據業務訴求,配置Master節點群組、Core節點群組或Task節點群組資訊。詳情請參見選擇硬體與網路

        本例中開啟Master節點群組下的挂载公网開關,其餘使用預設值即可。

        集群伸缩

        配置Auto Scaling規則。

      3. 基础配置

        參數名

        說明

        集群名称

        叢集的名字,長度限制為1~64個字元,僅可使用中文、字母、數字、短劃線(-)和底線(_)。

        身份凭证

        • 密钥对:如果希望在不輸入密碼的情況下進行身分識別驗證,可以選擇密钥对方式,更多詳情請參見管理SSH金鑰組

        • 密码:用於遠程登入叢集的Master節點。請記錄該配置,登入叢集時您需要輸入該密碼。

    3. 登入叢集Master節點,進入Hive準備資料。

      1. 擷取節點公網IP和節點名稱

        1. 登入E-MapReduce控制台,在左上方選擇地區。

        2. 單擊目的地組群對應的节点管理

        3. 节点管理頁簽,單擊節點群組所在行的image表徵圖,擷取公网 IP节点名称 / ID

        4. 如果節點的公網IP為空白,說明在建立叢集時沒有開啟掛載公網開關。此時,單擊節點ID查看執行個體詳情

          基本資料 > 公網IP地區,可以根據需求單擊綁定Elastic IP Address或者分配公網IP

          • 綁定Elastic IP Address:建立Elastic IP Address並進行綁定,具體可參考Elastic IP Address

          • 分配公網IP:設定大於0 Mbps的頻寬值,系統將自動分配公網IP,具體可參考固定公網IP

          如果需要靈活管理公網IP(如動態調整頻寬、切換綁定資源),推薦使用Elastic IP Address;如果僅需一個固定的公網出口且無需頻繁變更,則可以選擇固定公網IP。

      2. 登入叢集Master節點

        1. 登入E-MapReduce控制台,在左上方選擇地區。

        2. 單擊目的地組群對應的节点管理

        3. 节点管理頁簽,單擊節點群組所在行的image表徵圖,單擊節點ID進入執行個體詳情頁。

        4. 在節點ID的執行個體頁面,單擊遠端連線

        5. 在彈出的遠程連接對話方塊,使用預設的通過Workbench遠端連線,單擊立即登錄

        6. 在登入執行個體視窗根據實際情況填寫該執行個體資訊。

          說明

          在建立金鑰組時,私密金鑰會自動下載儲存為.pem格式的私密金鑰檔案。認證方式可以選擇SSH密鑰認證,上傳私密金鑰檔案,可以在不輸入密碼的情況下進行身分識別驗證。

      3. 準備Hive測試資料。使用Workbench方式登入叢集主節點後,在終端介面輸入如下命令:

        [user@emr-node ~]$ hive
        
        -- 建立庫
        hive> CREATE database IF NOT EXISTS myhive;
        
        -- 切換庫
        hive> USE myhive;
        
        -- 建立非分區表
        hive> CREATE TABLE IF NOT EXISTS employees (
                id INT,
                name STRING,
                age INT,
                department STRING
              )
              ROW FORMAT DELIMITED
              FIELDS TERMINATED BY ','
              STORED AS TEXTFILE;
        
        -- 插入資料
        hive> INSERT INTO employees VALUES(1, 'John', 25, 'Sales'),
            (2, 'Jane', 30, 'Marketing'),
            (3, 'Mike', 35, 'Engineering'),
            (4, 'Sarah', 28, 'HR'),
            (5, 'David', 32, 'Finance'),
            (6, 'Linda', 29, 'IT'),
            (7, 'Robert', 31, 'Operations'),
            (8, 'Emily', 27, 'Research'),
            (9, 'Michael', 33, 'Development'),
            (10, 'Chris', 26, 'Support');
        
        -- 建立分區表
        hive> CREATE TABLE employees_pt (
              id INT,
              name STRING,
              age INT
            )
          PARTITIONED BY (department STRING)
          ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
        
        -- 插入資料
        INSERT INTO employees_pt PARTITION (department='Sales') VALUES(1, 'John', 25),(2, 'Jane', 30),(3, 'Mike', 35);
        INSERT INTO employees_pt PARTITION (department='Marketing') VALUES(4, 'Sarah', 28),(5, 'David', 32);
        INSERT INTO employees_pt PARTITION (department='Engineering') VALUES(6, 'Linda', 29),(7, 'Robert', 31);
        INSERT INTO employees_pt PARTITION (department='HR') VALUES(8, 'Emily', 27),(9, 'Michael', 33),(10, 'Chris', 26);

        查詢非分區表和分區表:

        -- 查詢非分區表
        hive> SELECT * FROM employees;
        
        1       John    25      Sales
        2       Jane    30      Marketing
        3       Mike    35      Engineering
        4       Sarah   28      HR
        5       David   32      Finance
        6       Linda   29      IT
        7       Robert  31      Operations
        8       Emily   27      Research
        9       Michael 33      Development
        10      Chris   26      Support
        
        -- 查詢分區表
        hive> SELECT * FROM employees_pt;
        
        6       Linda   29      Engineering
        7       Robert  31      Engineering
        8       Emily   27      HR
        9       Michael 33      HR
        10      Chris   26      HR
        4       Sarah   28      Marketing
        5       David   32      Marketing
        1       John    25      Sales
        2       Jane    30      Sales
        3       Mike    35      Sales

步驟二:建立Hive+HDFS外部資料源

  1. 登入MaxCompute控制台,在左上方選擇地區。

  2. 在左側導覽列,選擇管理配置 > 外部数据源 。

  3. 外部数据源頁面,單擊创建外部数据源

  4. 在彈出的新增外部数据源對話方塊,根據介面提示配置相關參數。參數說明如下:

    參數

    是否必填

    說明

    外部数据源类型

    必填

    選擇Hive+HDFS

    外部数据源名称

    必填

    可自訂命名。命名規則如下:

    • 以字母開頭,且只能包含小寫字母、底線和數字。

    • 不能超過128個字元。

    例如hive_hdfs

    外部数据源描述

    選填

    根據需要填寫。

    网络连接对象

    必填

    網路連接名稱,選擇或建立MaxCompute到阿里雲E-MapReduce或Hadoop VPC網路的串連。

    重要

    VPC必須與MaxCompute外部資料源及外部資料源掛載的專案處於同一地區。

    參數詳情請參見網路開通流程中的建立MaxCompute與目標VPC網路間的網路連接步驟。

    集群名称

    在Hadoop叢集高可用環境下用於指代NameNode的名稱。

    以EMR叢集為例,叢集名稱的擷取方法如下:

    1. 登入E-MapReduce控制台,在左上方選擇地區。

    2. 單擊目的地組群ID,進入叢集詳情頁面。

    3. 集群服务頁簽,單擊HDFS服務的配置,進入配置頁面。

    4. 切換至hdfs-site.xml頁簽,在配置项名称欄搜尋dfs.nameservices,該配置項對應的值則為集群名称

    NameNode 地址

    目標Hadoop叢集的Active和Standby NameNode服務地址和連接埠號碼(連接埠號碼通常是8020)。

    以EMR叢集為例,NameNode地址的擷取方法如下:

    1. 登入E-MapReduce控制台,在左上方選擇地區。

    2. 單擊目的地組群ID,進入叢集詳情頁面。

    3. 集群服务頁簽,單擊HDFS服務的状态,進入状态頁面。

    4. 组件列表地區,單擊NameNode前面的image表徵圖,展開拓撲列表。

    5. 擷取master-1-1節點對應的内网 IPNameNode 地址格式即為內網IP:8020

    HMS 服务地址

    目標Hadoop叢集的Active和Standby NameNode的Hive中繼資料服務地址和連接埠號碼(連接埠號碼通常是9083)。

    1. 登入E-MapReduce控制台,在左上方選擇地區。

    2. 單擊目的地組群ID,進入叢集詳情頁面。

    3. 集群服务頁簽,單擊Hive服務的状态,進入状态頁面。

    4. 组件列表地區,單擊HiveRuntime前面的image表徵圖,展開拓撲列表。

    5. 擷取master-1-1節點對應的内网 IPHMS 服务地址格式即為內網IP:9083

    Fs.Defaultfs

    认证类型

    暫時僅支援無認證方式。

    创建交换机

    MaxCompute通過VPC訪問資料來源,預設採用反向訪問2.0技術方案,該方案需要配置特定可用性區域的交換器,打通中繼資料訪問鏈路。

    各個Region可用交換器的可用性區域在介面提示中有說明,在要訪問的資料來源所在的VPC中,選擇已有或建立滿足可用性區域要求的交換器。

    外部数据源补充属性

    選填

    特殊聲明的外部資料源補充屬性。指定後,使用此外部資料源的任務可以按照參數定義的行為訪問源系統。

    說明

    支援的具體參數請關注後續官網文檔更新說明,具體參數將隨產品能力演化逐步放開。

  5. 單擊確認,完成外部資料源的建立。

步驟三:建立外部Schema

  1. 外部Schema操作需要在MaxCompute內部專案中執行,因此要求該內部專案必須已啟用支援Schema層級開關

    1. 在左側導覽列,選擇管理配置 > 项目管理

    2. 项目管理頁面,單擊目標專案操作列的升级到支持Schema层级

  2. 需要在執行Schema操作或查詢External Schema的資料前,開啟SQL文法支援的Schema開關,即在SQL前增加SET odps.namespace.schema=true;語句。

  3. 在MaxCompute用戶端中,使用如下命令建立引用了Hive+HDFS類型外部資料源的外部Schema:

    CREATE EXTERNAL SCHEMA IF NOT EXISTS <external_schema_name>
    WITH  <hive_foreign_server_name>
    ON '<database_name>' ;

    參數說明如下:

    • external_schema_name:自訂外部Schema名稱。本樣本為test_schema_hive

    • hive_foreign_server_name:已建立的外部資料源名稱。本樣本為hive_hdfs

    • database_name:Hive資料庫名稱。本樣本為myhive

步驟四:使用SQL訪問資料來源系統

  • 列出Hive的表名稱

    • 方式1

      SHOW tables IN <external_schema_name>; --external_schema_name為外部Schema名稱。
    • 方式2

      USE SCHEMA <external_schema_name>; --external_schema_name為外部Schema名稱。
      SHOW tables;
  • 使用樣本

    • 查詢名稱為test_schema的外部Schema下的所有表名。

      USE SCHEMA test_schema;
      SHOW TABLES;

      返回結果樣本:

      ALIYUN$xxx@test.aliyunid.com:employees_pt
      ALIYUN$xxx@test.aliyunid.com:employees
    • 查詢test專案中test_schemaSchema的employees表資料。

      SELECT * FROM test.test_schema.employees;

      返回結果樣本:

      +------------+------------+------------+------------+
      | id         | name       | age        | department | 
      +------------+------------+------------+------------+
      | 1          | John       | 25         | Sales      | 
      | 2          | Jane       | 30         | Marketing  | 
      | 3          | Mike       | 35         | Engineering | 
      | 4          | Sarah      | 28         | HR         | 
      | 5          | David      | 32         | Finance    | 
      | 6          | Linda      | 29         | IT         | 
      | 7          | Robert     | 31         | Operations | 
      | 8          | Emily      | 27         | Research   | 
      | 9          | Michael    | 33         | Development | 
      | 10         | Chris      | 26         | Support    | 
      +------------+------------+------------+------------+
    • 從資料來源將聯邦外表employees的資料複製入數倉。

      MaxCompute不允許對來自外部Schema執行CREATE TABLE AS 操作,因此需要使用USE SCHEMA Default;將Schema切換為Default,再執行如下語句:

      -- 將聯邦外表的資料複製到數倉中
      CREATE TABLE employees_copy AS SELECT * FROM test.test_schema.employees;
      
      -- 查詢數倉中已複製的表資料
      SELECT * FROM employees_copy;

      返回結果樣本:

      +------------+------------+------------+------------+
      | id         | name       | age        | department | 
      +------------+------------+------------+------------+
      | 1          | John       | 25         | Sales      | 
      | 2          | Jane       | 30         | Marketing  | 
      | 3          | Mike       | 35         | Engineering | 
      | 4          | Sarah      | 28         | HR         | 
      | 5          | David      | 32         | Finance    | 
      | 6          | Linda      | 29         | IT         | 
      | 7          | Robert     | 31         | Operations | 
      | 8          | Emily      | 27         | Research   | 
      | 9          | Michael    | 33         | Development | 
      | 10         | Chris      | 26         | Support    | 
      +------------+------------+------------+------------+