hbase_資料備份(copyTable)
HBase的資料備份或者容災方案有這幾種:Distcp,CopyTable,Export/Import,Snapshot,Replication,以下分別介紹(以下描述的內容均是基於0.94.20版本)。
1. Distcp(作廢)
在使用distcp命令copy hdfs檔案的方式實現備份時,需要禁用備份表確保copy時該表沒有資料寫入,對於線上服務的hbase叢集,該方式不可用,而且在一些文章中可以看到通過distcp檔案恢復hbase表時需使用:
bin/hbase org.jruby.Main bin/add_table.rb /hbase/testtable
命令把從hdfs目錄中恢復表的元資料,然後重啟
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
該方式,原表、目標表的名稱相同
全部使用方式如下:
MR的map數量與表的region數相同,與HFile檔案個數無關。
CopyTable工具採用scan查詢,寫入新表時採用put和delete API,全是基於hbase