全部產品
Search
文件中心

MaxCompute:HBase外部表格(HBase標準版或增強版)

更新時間:Sep 09, 2026

在 MaxCompute 與阿里雲 HBase 服務網路連通的前提下,可通過建立 HBase 外部表格關聯 HBase 標準版或增強版叢集中的表。HBase 外部表格支援將 HBase 資料同步到 MaxCompute 進行 ETL 處理、關聯 HBase 表進行聯邦計算,以及將 MaxCompute 資料寫入 HBase。本文介紹如何建立 HBase 外部表格。

背景資訊

HBase 是相容標準HBase訪問協議的分散式資料庫,包含HBase標準版、HBase增強版和HBase Serverless版,MaxCompute僅支援訪問HBase標準版或HBase增強版叢集。

預設情況下,MaxCompute與阿里雲HBase服務間的網路不可達,您需要提前通過專用網路串連方案(VPC)建立二者間的網路通路後,才可以建立HBase外部表格來關聯HBase標準版或增強版叢集中的表。注意MaxCompute通過外部表格的方式訪問HBase時,網路打通包括通過Network建立MaxCompute和VPC的網路鏈路,也需要開啟HBase的白名單,詳情請參見設定白名單。

說明

HBase增強版是雲端式原生多模資料庫Lindorm核心研發的,HBase增強版執行個體也可以通過Lindorm控制台建立,該情境下建立HBase外部表格的操作,請參見Lindorm外部表格(雲原生多模資料庫)。本文僅以通過HBase控制台建立的HBase執行個體為例進行介紹。

前提條件

建立HBase外部表格前,請確認已經滿足如下條件:

  • 已建立HBase標準版或增強版叢集,並完成環境配置。

    更多購買HBase標準版叢集及配置環境資訊,請參見HBase標準版快速入門。

    更多購買HBase增強版叢集及配置環境資訊,請參見HBase增強版快速入門。

  • 已通過HBase用戶端在HBase叢集中建立好了表。

    更多建立HBase表資訊,請參見HBase Shell使用介紹。

    為便於展示使用樣本,本文假設在HBase標準版或增強版叢集中已建立表mf_hbase_test_t,建表命令如下。

    --建立HBase表。
    CREATE 'mf_hbase_test_t', 'f'
    --插入資料。其中:1表示RowKey,f表示col_family,col1表示col_name,hello表示col_value。
    put 'mf_hbase_test_t', '1', 'f:col1', 'hello'
  • 已建立待關聯HBase表的目標MaxCompute專案。

    更多建立MaxCompute專案資訊,請參見建立MaxCompute專案。

  • 已安裝MaxCompute用戶端。

    更多安裝MaxCompute用戶端操作,請參見安裝並配置MaxCompute用戶端。

  • 已基於專用網路串連方案,開通MaxCompute和HBase服務間的網路連接。

    更多專用網路串連方案資訊,請參見網路開通流程。

使用限制

  • 支援華北2(北京)、華東2(上海)、華北3(張家口)、華北6(烏蘭察布)、華東1(杭州)、華南1(深圳)、中國香港、華東 2 金融雲(可用性區域F)、日本(東京)、新加坡、馬來西亞(吉隆坡)、印尼(雅加達)、德國(法蘭克福)、美國(矽谷)、美國(維吉尼亞)地區通過網路開通流程串連MaxCompute和HBase,僅以上地區可以建立HBase外部表格,其他地區暫不支援。

  • 網路打通時,MaxCompute側僅打通到所填VPC ID的網路連接,如需跨Region訪問或者訪問該Region的其他VPC,請根據云上VPC現有打通方案,打通專線直連方案所填寫的VPC和其他VPC之間的網路。

  • HBase外部表格僅支援訪問HBase2.x版本的叢集。

  • HBase外部表格暫不支援EMR HBase叢集。

  • HBase外部表格不支援cluster屬性。

注意事項

讀取HBase源表資料時,如果源表中的列數小於外表DDL中的列數,系統會將缺少的列值補充為NULL。反之(大於時),會丟棄超出的列資料。

建立HBase外部表格文法

在建立外部表格時,您需要在建表DDL語句中指定HBaseStorageHandler,並配置HBase標準版或增強版叢集相關資訊。建表時,表名和欄位名大小寫不敏感。在查詢表或欄位時,無需區分大小寫,且不支援強制轉換大小寫。建表語句定義如下。

--開啟Hive相容模式。
set odps.sql.hive.compatible = true;
--僅當HBase叢集為增強版時,除上述SET參數外,還必須配置odps.sql.hbase.version參數,切換HBase版本為lindorm。
set odps.sql.hbase.version=lindorm;
--建立HBase外部表格。
create external table if not exists <mc_hbase_external>
(
  <col1_name> <data_type>,
  <col2_name> <data_type>,
  ......
)
--處理HBase資料來源的Handler。
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties (
                      'hbase.columns.mapping'='<:key,col-family:col-name1,col-family:col-name2,...>')
tblproperties (
--hbase.table.name和hbase.zookeeper.quorum必須配置。
'hbase.table.name'='<hbase_table_name>',
'hbase.zookeeper.quorum'='<VPC ip1|host1:port,VPC ip2|host2:port...>',
--僅當HBase叢集為增強版時,還必須配置hbase.client.username和hbase.client.password參數。
'hbase.client.username'='****',
'hbase.client.password'='****',
--hbase.zookeeper.property.clientPort、mcfed.zookeeper.session.timeout和hbase.client.retries.number為選擇性參數。
--當HBase叢集為標準版時,hbase.zookeeper.property.clientPort的預設值為2181。
--當HBase叢集為增強版時,hbase.zookeeper.property.clientPort的預設值為30020。
['hbase.zookeeper.property.clientPort'='{2181|30020}',]
['mcfed.zookeeper.session.timeout'='<value>',]
['hbase.client.retries.number'='<value>',]
'networklink'='<networklink_name>'
);
  • mc_hbase_external:必填。待建立HBase外部表格的名稱。

  • col_name:必填。HBase外部表格的列名稱。

  • data_type:必填。列的資料類型。

  • with serdeproperties:

    • 'hbase.columns.mapping'='<:key,col-family:col-name1,col-family:col-name2,...>':必填。HBase外部表格與HBase叢集中表的列映射關係。

      • RowKey(:key)必須放在最前面。

      • 列格式為col-family:col-name1,col-family:col-name2。一個作業中col-family只能有一個。

  • hbase://VPC ip|host:port:必填。HBase上配置的Zookeeper Master。即Zookeeper串連地址(HBase標準版)或HBase叢集的Java API訪問地址(HBase增強版)。也可以為關聯的HBase表所屬VPC網路IP、IP網段、連接埠。例如192.0.2.1-192.0.2.10:9000, 192.0.2.20:70050或192.0.2.20/16:2181。登入HBase管理主控台,在叢集列表頁面單擊目的地組群名稱後,在左側導覽列單擊資料庫連接,即可在串連資訊處擷取。

    • 對於分布式的資料來源,請確認需要訪問的前端IP連接埠以及DataNode的IP連接埠。HBase外部表格需要填寫Zookeeper、HMaster、Region Server的IP和連接埠(2181/30020、16000、16020)。HBase標準版的預設Zookeeper連接埠為2181。HBase增強版的預設Zookeeper連接埠為30020。

    • 由於該欄位支援IP位址區段,且映射IP會耗費資源,預設一次映射的IP數不能超過2000個。

  • tblproperties:

    • 'hbase.table.name'='<hbase_table_name>':必填。MaxCompute所關聯的HBase叢集中的表的名稱。必須提前通過HBase用戶端建好。

    • 'hbase.zookeeper.quorum'='<VPC ip1|host1:port,VPC ip2|host2:port...>':必填。HBase的Zookeeper的IP或網域名稱。即Zookeeper串連地址(HBase標準版)或HBase叢集的Java API訪問地址(HBase增強版)。

    • hbase.client.username:必填。僅當HBase叢集為增強版時,需要配置該參數。登入HBase管理主控台,在叢集列表頁面單擊目的地組群名稱後,在左側導覽列單擊資料庫連接,即可通過串連資訊處的預設使用者名擷取。

    • hbase.client.password:必填。僅當HBase叢集為增強版時,需要配置該參數。登入HBase管理主控台,在叢集列表頁面單擊目的地組群名稱後,在左側導覽列單擊資料庫連接,即可通過串連資訊處的預設密碼擷取。

    • 'hbase.zookeeper.property.clientPort'='{2181|30020}':可選。HBase的Zookeeper連接埠。HBase標準版的預設Zookeeper連接埠為2181。HBase增強版的預設Zookeeper連接埠為30020。

    • 'mcfed.zookeeper.session.timeout'='<value>':可選。Zookeeper的逾時時間。單位為毫秒,建議設定為30000。

    • 'hbase.client.retries.number'='<value>':可選。HBase用戶端串連重試次數。

    • 'networklink'='<networklink_name>':必填。HBase執行個體所在VPC的MaxCompute網路連接。

    說明

    mcfed.zookeeper和hbase開頭的配置是Zookeeper的相關配置。

使用樣本

  1. 登入MaxCompute控制台,執行CREATE EXTERNAL TABLE語句建立HBase外部表格。

    命令樣本如下。

    • HBase標準版

      SET odps.sql.hive.compatible = true;
      CREATE EXTERNAL TABLE IF NOT EXISTS mf_hbase_test_t_ext
      (
        key  int,
        col1 string,
        col2 string
      )
      stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
      with serdeproperties (
                            'hbase.columns.mapping'=':key,f:col1,f:col2')
      tblproperties (
      'hbase.table.name'='mf_hbase_test_t',
      'hbase.zookeeper.quorum'='hb-2zef****-master1-001.hbase.rds.aliyuncs.com,hb-2zef****-master2-001.hbase.rds.aliyuncs.com,hb-2zef****-master3-001.hbase.rds.aliyuncs.com',
      'hbase.zookeeper.property.clientPort'='2181',
      'networklink'='networklink4hbase');
    • HBase增強版

      SET odps.sql.external.net.vpc=true;
      SET odps.sql.hive.compatible = true;
      SET odps.sql.hbase.version=lindorm;
      CREATE EXTERNAL TABLE mf_hbase_test_t_ext
      (
        key  int,
        col1 string,
        col2 string
      )
      stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
      WITH serdeproperties (
                            'hbase.columns.mapping'=':key,f:col1,f:col2')
      tblproperties (
      'hbase.table.name'='mf_hbase_test_t',
      'hbase.zookeeper.quorum'='hb-2zef****-master1-001.hbase.rds.aliyuncs.com,hb-2zef****-master2-001.hbase.rds.aliyuncs.com,hb-2zef****-master3-001.hbase.rds.aliyuncs.com',
      'hbase.zookeeper.property.clientPort'='30020',
      'networklink'='networklink4hbase');
  2. 執行SELECT命令查看關連接果,確保關聯成功。

    命令樣本如下。

    SELECT * FROM mf_hbase_test_t_ext;

    返回結果如下。

    +------+------------+------------+
    | key  | col1       | col2       |
    +------+------------+------------+
    | 1    | hello      | NULL       |
    +------+------------+------------+
  3. 執行INSERT OVERWRITE語句向HBase中的表寫入資料。

    命令樣本如下。

    INSERT OVERWRITE TABLE mf_hbase_test_t_ext SELECT '2', 'hbase', 'mftestinsert';
  4. 執行SELECT語句驗證寫入的資料。

    命令樣本如下。

    SELECT * FROM mf_hbase_test_t_ext;

    返回結果如下。

    +------+------------+--------------------+
    | key  | col1       | col2               |
    +------+------------+--------------------+
    | 1    | hello      | NULL               |
    | 2    | hbase      | mftestinsert       |
    +------+------------+--------------------+