閱讀879 返回首頁    go 阿裏雲 go 技術社區[雲棲]


使用CopyTable同步HBase數據

CopyTable是Hbase提供的一個數據同步工具,可以用於同步表的部分或全部數據。本文介紹如何使用CopyTable同步HBase數據。針對沒有hadoop集群的用戶,還介紹了單機運行CopyTable的配置和參數。

準備工作

1 安裝HBase
CopyTable依賴於hadoop mapreduce。如果源HBase集群中開啟了mapreduce則可以直接在源集群上運行。否則可以在另一個hadoop集群上安裝HBase客戶端並將hbase-site.xml文件中的zk地址指向源集群。
也可以單機運行,單機運行時,不需要安裝hadoop,隻要安裝了HBase就可以使用hadoop的本地模式運行CopyTable。
安裝和配置HBase的過程可以參考雲HBase相關文檔

2 創建目標表
使用CopyTable同步數據前,需要確保目標表存在。如果不存在需要先創建目標表。可以根據數據的分布情況對目標表進行預分裂,這樣能夠提高寫入速度。

3 其他準備工作
需要將運行CopyTable的機器ip加入HBase的ip白名單,確保可以訪問到HBase。
需要修改hbase-site.xml文件中的zk地址指向源集群。

準備工作完成後,就可以運行CopyTable進行數據同步了。

命令示例

./bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable -Dhbase.client.scanner.caching=200 -Dmapreduce.local.map.tasks.maximum=16 -Dmapred.map.tasks.speculative.execution=false --peer.adr=$ZK_IP1,$ZK_IP2,$ZK_IP3:/hbase $TABLE_NAME

參數說明

CopyTable常用選項說明如下:
startrow 開始行。
stoprow 停止行。
starttime 時間戳(版本號)的最小值。
endtime 時間戳的最大值。如果不指定starttime,endtime不起作用。
peer.adr 目標集群的地址。格式為:hbase.zookeeer.quorum:hbase.zookeeper.client.port:zookeeper.znode.parent
families 要同步的列族。多個列族用逗號分隔。
all.cells 刪除標記也進行同步。
更多參數參見官方文檔

除copytable的參數外, 以下選項也建議在命令中進行設置:
(1)對於單機運行的情況,需要指定mapreduce.local.map.tasks.maximum參數,表示並行執行的最大map個數。不指定的話默認是1,所有任務都是串行執行的。
(2)hbase.client.scanner.caching建議設置為大於100的數。這個數越大,使用的內存越多,但是會減少scan與服務端的交互次數,對提升讀性能有幫助。
(3)mapred.map.tasks.speculative.execution建議設置為false,避免因預測執行機製導致數據寫兩次。

另外,如果是在E-mapreduce集群上執行CopyTable,需要注意E-mapreduce默認的hbase-site.xml文件中配置了phoenix,所以需要導入phoenix的jar包,否則運行時會報錯:
-libjars $HBASE_HOME/lib/phoenix-$PhoenixVersion-HBase-$HBaseVersion-server.jar

性能數據

待補充

最後更新:2017-08-22 23:32:46

  上一篇:go  SpringMVC 第二章 - WebApplicationContext的初始化
  下一篇:go  開發區塊鏈數字貨幣交易網站,數字貨幣交易所搭建