在MaxCompute與阿里云HBase服務間的網絡處于連通狀態時,MaxCompute支持您通過創建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)、日本(東京)、新加坡、馬來西亞(吉隆坡)、印度尼西亞(雅加達)、德國(法蘭克福)、美國(硅谷)、美國(弗吉尼亞)地域通過訪問VPC方案(專線直連)連接MaxCompute和HBase,僅以上地域可以創建HBase外部表,其他地域暫不支持。
網絡打通時,MaxCompute側僅打通到所填VPC ID的網絡連接,如需跨Region訪問或者訪問該Region的其他VPC,請根據云上VPC現有打通方案,打通專線直連方案所填寫的VPC和其他VPC之間的網絡。
HBase外部表僅支持訪問HBase2.x版本的集群。
HBase外部表暫不支持EMR HBase集群。
HBase外部表不支持cluster屬性。
創建HBase外部表語法
在創建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的相關配置。
使用示例
登錄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'='2181', 'networklink'='networklink4hbase');
執行
select
命令查看關聯結果,確保關聯成功。命令示例如下。
select * from mf_hbase_test_t_ext;
返回結果如下。
+------+------------+------------+ | key | col1 | col2 | +------+------------+------------+ | 1 | hello | NULL | +------+------------+------------+
執行
INSERT OVERWRITE
語句向HBase中的表寫入數據。命令示例如下。
INSERT OVERWRITE TABLE mf_hbase_test_t_ext SELECT '2', 'hbase', 'mftestinsert';
執行
SELECT
語句驗證寫入的數據。命令示例如下。
select * from mf_hbase_test_t_ext;
返回結果如下。
+------+------------+--------------------+ | key | col1 | col2 | +------+------------+--------------------+ | 1 | hello | NULL | | 2 | hbase | mftestinsert | +------+------------+--------------------+