HBase數據導入工具總結
本文對HBase常用的數據導入工具進行介紹,並結合雲HBase常見的導入場景,給出建議的遷移工具和參考資料。
HBase之間數據導入常用工具
HBase提供了幾種數據遷移工具,其中基於API調用的有CopyTable,Export&Import。基於寫HDFS的有distcp,snapshot。
這裏要說明的是,本文作為一般性的介紹,不能忽略常用的工具distcp和snapshot,但是由於雲HBase默認不開啟HDFS端口,所以在雲HBase上麵基於HDFS的方法都是用不了的。我們推薦用戶使用CopyTable進行遷移,根據我們的測試,CopyTable的性能足以支撐10T以下數據的遷移。如果您的數據量比較大(超過10T),可以聯係雲HBase工作人員單獨為您處理。
CopyTable
CopyTable是Hbase提供的一個數據同步工具,可以用於同步表的部分或全部數據。CopyTable通過運行一個map-reduce任務從源表讀出數據再寫入到目標表。
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的使用和性能數據可參考:使用CopyTable同步HBase數據
Export&Import
Export將HBase表內容dump到一個順序文件(sequence)中。Import將Export得到的順序文件內容寫入HBase表。和CopyTable一樣,Export和Import也是通過運行map-reduce任務來執行的。
Export和Import命令格式:
bin/hbase org.apache.hadoop.hbase.mapreduce.Export <tablename> <outputdir> [<versions> [<starttime> [<endtime>]]]
bin/hbase org.apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir>
distcp
distcp是Hadoop提供的用於複製HDFS文件的工具,經常也被用來同步HBase數據。
使用distcp進行數據同步的步驟如下:
(1)源集群停止寫入。
(2)將數據文件複製到目標集群上。運行
hadoop distcp $SrcFilePath $DstFilePath
(3)然後在目標集群上執行hbase hbck -fixAssignments -fixMeta
snapshot
HBase snapshot可以在對region-server影響很小的情況下創建快照、將快照複製到另一個集群。
使用snapshot遷移數據的操作步驟如下:
(1)在源表上創建snapshot。hbase snapshot create -n $SnapshotName -t $TableName
(2)將snapshot拷貝到目標集群的HDFS上。hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot $SnapshotName -copy-from $SrcSnapshotPath -copy-to $DstSnapshotPath
(3)在目標集群恢複snapshot。在hbase shell中執行'$SnapshotName'
其他類型數據庫向HBase導入常用工具
其他類型數據向HBase導入常見的工具有:
(1)關係數據庫可以使用Sqoop導入。
(2)其他類型數據可以使用DataX。
(3)如果是周期性數據導入需求,可以使用數據集成。
Sqoop
Sqoop是一個用來將Hadoop和關係型數據庫中的數據相互轉移的工具。Sqoop的數據同步也是通過map-reduce實現的。
使用Sqoop同步數據隻需要運行一個命令就可以。命令示例:sqoop import -Dmapreduce.local.map.tasks.maximum=8 --connect jdbc:mysql://$mysqlURL:3306/$database --table $table --hbase-table $hbaseTable --column-family $columnFamily --hbase-row-key $mysqlColumn --username $mysqlUser -m 8 -P
Sqoop的使用可參考:使用Sqoop從Mysql向雲HBase同步數據
DataX
DataX 是廣泛使用的離線數據同步工具/平台,實現包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、OTS、ODPS 等各種異構數據源之間高效的數據同步功能。
DataX本身作為數據同步框架,將不同數據源的同步抽象為從源頭數據源讀取數據的Reader插件,以及向目標端寫入數據的Writer插件,理論上DataX框架可以支持任意數據源類型的數據同步工作。同時DataX插件體係作為一套生態係統, 每接入一套新數據源該新加入的數據源即可實現和現有的數據源互通。
使用DataX進行數據同步的步驟如下:
(1)編寫作業的配置文件。配置文件為json格式,具體格式可參考這裏
(2)運行DataX。執行命令python datax.py $config.json
DataX的使用可參考官方文檔
數據集成
數據集成是阿裏集團對外提供的的數據同步平台,其底層也基於DataX。由於數據集成提供了調度的功能,所以很適合用於周期性導入數據或是與其他任務有依賴關係的情況。
使用數據集成同步數據的步驟較複雜,具體請參考這裏
雲HBase數據遷移指南
場景 | 建議遷移工具 | 參考資料 |
---|---|---|
HBase->HBase,數據量<10T | CopyTable | 使用CopyTable同步HBase數據 |
HBase->HBase,數據量>10T | 聯係雲HBase工作人員處理 | |
HBase->HBase,Phoenix | CopyTable | CopyTable使用可參考:使用CopyTable同步HBase數據 phoenix表與HBase表之間對應關係可參考: 使用數據集成同步phoenix數據 |
關係型數據庫->HBase | Sqoop | 使用Sqoop從Mysql向雲HBase同步數據 |
其他類型數據源一次性導入HBase | DataX | DataX官方文檔 |
其他類型數據源周期性導入HBase | 數據集成 | step-by-step通過數據集成同步數據到HBase 數據集成概述 |
最後更新:2017-08-24 19:02:15