HBase資料來源為您提供讀取和寫入HBase的雙向通道,本文為您介紹DataWorks的HBase資料同步的能力支援情況。
支援的版本
支援HBase0.94.x、HBase1.1.x、HBase2.x和Phoenix5.x版本。
如果您的HBase版本為HBase0.94.x,Reader和Writer端的外掛程式請選擇094x。
"reader": { "plugin": "094x" }
"writer": { "hbaseVersion": "094x" }
如果您的HBase版本為HBase1.1.x或HBase2.x,Reader和Writer端的外掛程式請選擇11x。
"reader": { "plugin": "11x" }
"writer": { "hbaseVersion": "11x" }
說明HBase1.1.x外掛程式當前可以相容HBase 2.0。
HBase11xsql Writer外掛程式實現了向Hbase中的SQL表(phoenix)大量匯入資料。因為Phoenix對rowkey進行了資料編碼,如果您直接使用HBaseAPI寫入,需要手動轉換資料,麻煩且易錯。HBase11xsql Writer外掛程式為您提供了單間的SQL表的資料匯入方式。
說明通過Phoenix的JDBC驅動,執行UPSERT語句向表中批量寫入資料。因為使用上層介面,所以可以同步更新索引表。
使用限制
HBase Reader | HBase20xsql Reader | HBase11xsql Writer |
|
|
|
支援的功能
HBase Reader
支援normal和multiVersionFixedColumn模式
normal模式:把HBase中的表當成普通二維表(橫表)進行讀取,擷取最新版本資料。
hbase(main):017:0> scan 'users' ROW COLUMN+CELL lisi column=address:city, timestamp=1457101972764, value=beijing lisi column=address:contry, timestamp=1457102773908, value=china lisi column=address:province, timestamp=1457101972736, value=beijing lisi column=info:age, timestamp=1457101972548, value=27 lisi column=info:birthday, timestamp=1457101972604, value=1987-06-17 lisi column=info:company, timestamp=1457101972653, value=baidu xiaoming column=address:city, timestamp=1457082196082, value=hangzhou xiaoming column=address:contry, timestamp=1457082195729, value=china xiaoming column=address:province, timestamp=1457082195773, value=zhejiang xiaoming column=info:age, timestamp=1457082218735, value=29 xiaoming column=info:birthday, timestamp=1457082186830, value=1987-06-17 xiaoming column=info:company, timestamp=1457082189826, value=alibaba 2 row(s) in 0.0580 seconds }
讀取後的資料如下所示。
rowKey
address:city
address:contry
address:province
info:age
info:birthday
info:company
lisi
beijing
china
beijing
27
1987-06-17
baidu
xiaoming
hangzhou
china
zhejiang
29
1987-06-17
alibaba
multiVersionFixedColumn模式:把HBase中的表當成豎表進行讀取。讀出的每條記錄是四列形式,依次為rowKey、family:qualifier、timestamp和value。讀取時需要明確指定要讀取的列,把每一個cell中的值,作為一條記錄(record),若有多個版本則存在多條記錄。
hbase(main):018:0> scan 'users',{VERSIONS=>5} ROW COLUMN+CELL lisi column=address:city, timestamp=1457101972764, value=beijing lisi column=address:contry, timestamp=1457102773908, value=china lisi column=address:province, timestamp=1457101972736, value=beijing lisi column=info:age, timestamp=1457101972548, value=27 lisi column=info:birthday, timestamp=1457101972604, value=1987-06-17 lisi column=info:company, timestamp=1457101972653, value=baidu xiaoming column=address:city, timestamp=1457082196082, value=hangzhou xiaoming column=address:contry, timestamp=1457082195729, value=china xiaoming column=address:province, timestamp=1457082195773, value=zhejiang xiaoming column=info:age, timestamp=1457082218735, value=29 xiaoming column=info:age, timestamp=1457082178630, value=24 xiaoming column=info:birthday, timestamp=1457082186830, value=1987-06-17 xiaoming column=info:company, timestamp=1457082189826, value=alibaba 2 row(s) in 0.0260 seconds }
讀取後的資料(4列) 如下所示。
rowKey
column:qualifier
timestamp
value
lisi
address:city
1457101972764
beijing
lisi
address:contry
1457102773908
china
lisi
address:province
1457101972736
beijing
lisi
info:age
1457101972548
27
lisi
info:birthday
1457101972604
1987-06-17
lisi
info:company
1457101972653
beijing
xiaoming
address:city
1457082196082
hangzhou
xiaoming
address:contry
1457082195729
china
xiaoming
address:province
1457082195773
zhejiang
xiaoming
info:age
1457082218735
29
xiaoming
info:age
1457082178630
24
xiaoming
info:birthday
1457082186830
1987-06-17
xiaoming
info:company
1457082189826
alibaba
HBase Writer
支援源端多個欄位拼接作為rowkey
目前HBase Writer支援源端多個欄位拼接作為HBase表的rowkey。
寫入HBase的版本支援
寫入HBase的時間戳記(版本)支援:
目前時間作為版本。
指定源端列作為版本。
指定一個時間作為版本。
支援的欄位類型
離線讀
支援讀取HBase資料類型及HBase Reader針對HBase類型的轉換列表如下表所示。
類型分類 | Data Integrationcolumn配置類型 | 資料庫資料類型 |
整數類 | long | short、int和long |
浮點類 | double | float和double |
字串類 | string | binary_string和string |
日期時間類 | date | date |
位元組類 | bytes | bytes |
布爾類 | boolean | boolean |
HBase20xsql Reader支援大部分Phoenix類型,但也存在個別類型沒有支援的情況,請注意檢查你的類型。
HBase20xsql Reader針對Phoenix類型的轉換列表,如下所示。
DataX內部類型 | Phoenix資料類型 |
long | INTEGER、TINYINT、SMALLINT、BIGINT |
double | FLOAT、DECIMAL、DOUBLE |
string | CHAR、VARCHAR |
date | DATE、TIME、TIMESTAMP |
bytes | BINARY、VARBINARY |
boolean | BOOLEAN |
離線寫
支援讀取HBase資料類型,HBase Writer針對HBase類型的轉換列表,如下表所示。
column的配置需要和HBase表對應的列類型保持一致。
除下表中羅列的欄位類型外,其它類型均不支援。
類型分類 | 資料庫資料類型 |
整數類 | INT、LONG和SHORT |
浮點類 | FLOAT和DOUBLE |
布爾類 | BOOLEAN |
字串類 | STRING |
注意事項
如果您在測試連通性時遇到 "tried to access method com.google.common.base.Stopwatch" 的錯誤資訊,請在新增資料來源頁面的JSON配置項內添加 "hbaseVersion": "" 欄位,指定您的hbase版本,例如, "hbaseVersion:"2.0.14"。
建立資料來源
在進行資料同步任務開發時,您需要在DataWorks上建立一個對應的資料來源,操作流程請參見建立並管理資料來源,詳細的配置參數解釋可在配置介面查看對應參數的文案提示。
資料同步任務開發
資料同步任務的配置入口和通用配置流程可參見下文的配置指導。
單表離線同步任務配置指導
操作流程請參見通過嚮導模式配置離線同步任務、通過指令碼模式配置離線同步任務。
指令碼模式配置的全量參數和指令碼Demo請參見下文的附錄:指令碼Demo與參數說明。
常見問題
Q:並發設定多少比較合適?速度慢時增加並發有用嗎?
A:資料匯入進程預設JVM的堆大小是2GB,並發(channel數)是通過多線程實現的,開過多的線程有時並不能提高匯入速度,反而可能因為過於頻繁的GC導致效能下降。一般建議並發數(channel)為5-10。
Q:batchSize設定多少比較合適?
A:預設是256,但應根據每行的大小來計算最合適的batchSize。通常一次操作的資料量在2MB~4MB左右,用該值除以行大小,即可得到batchSize。
附錄:指令碼Demo與參數說明
離線任務指令碼配置方式
如果您配置離線任務時使用指令碼模式的方式進行配置,您需要按照統一的指令碼格式要求,在任務指令碼中編寫相應的參數,詳情請參見通過指令碼模式配置離線同步任務,以下為您介紹指令碼模式下資料來源的參數配置詳情。