1. 程式人生 > >hbase_資料備份(copyTable)

hbase_資料備份(copyTable)

HBase的資料備份或者容災方案有這幾種:DistcpCopyTableExport/ImportSnapshotReplication,以下分別介紹(以下描述的內容均是基於0.94.20版本)。

1. Distcp(作廢)

在使用distcp命令copy hdfs檔案的方式實現備份時,需要禁用備份表確保copy時該表沒有資料寫入,對於線上服務的hbase叢集,該方式不可用,而且在一些文章中可以看到通過distcp檔案恢復hbase表時需使用:

bin/hbase org.jruby.Main bin/add_table.rb /hbase/testtable

命令把從hdfs目錄中恢復表的元資料,然後重啟

hbase,但是0.94之後的版本的bin目錄下均沒有找到add_table.rb檔案,似乎hbase已經廢棄該功能。

2. CopyTable(複製表)

 執行命令前,需先建立表

支援時間區間、row區間,改變表名稱,改變列簇名稱,指定是否copy刪除資料等功能,例如:

hbase org.apache.hadoop.hbase.mapreduce.CopyTable --starttime=1265875194289 --endtime=1265878794289 --peer.adr= dstClusterZK:2181:/hbase --families=myOldCf:myNewCf,cf2,cf3 TestTable

1、同一個叢集不同表名稱

hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=tableCopy  srcTable

2、跨叢集copy

hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=dstClusterZK:2181:/hbase srcTable

該方式,原表、目標表的名稱相同

全部使用方式如下:

MRmap數量與表的region數相同,與HFile檔案個數無關。

CopyTable工具採用scan查詢,寫入新表時採用putdelete API,全是基於hbase

client api進行讀寫,無法使用Import工具的bulk匯入。