摘自:http://qindongliang.iteye.com/blog/2366547
Hbase的數據備份策略有:
- Distcp
- CopyTable
- Export/Import
- Replication
- Snapshot
下面介紹這幾種方式:
一、Distcp(離線備份)
直接備份HDFS數據,備份前需要disable表,在備份完成之前 服務不可用對在線服務類業務不友好
二、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
三、Export/Import(熱備+離線)
通過Export導出數據到目標集群的hdfs,再在目標集群執行import導入數據,Export支持指定開始時間和結束時間,因此可以做增量備份。
四、Replication(實時)
通過Hbase的replication機制實現Hbase集群的主從模式實時同步
五、Snapshot(備份實時,恢復需要disable) 個人覺得這是備份里面最經濟劃算的一個,可以每天在固定時間點對hbase表數據進行快照備份,然后如果出現問題了,可以直接恢復到某個時間點上的數據,適合修復指標計算錯誤的場景,然后從某個時間點上重新修復。 下面詳細說下使用方式:
(1)先建立一個測試表 Java代碼
create 'test','cf'
(2)添加數據 Java代碼
> put 'test','a','cf:c1',1
> put 'test','a','cf:c2',2
> put 'test','b','cf:c1',3
> put 'test','b','cf:c2',4
> put 'test','c','cf:c1',5
> put 'test','c','cf:c2',6
(3)創建快照
hbase snapshot create -n test_snapshot -t test
(4)查看快照
list_snapshots
(5)導出到HDFS Java代碼
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot test_snapshot -copy-to hdfs://user/back/xxx
(6)從快照恢復數據到原表中
restore _snapshot 'test_snapshot'
(7)從快照中恢復到一個新表中
clone_snapshot 'test_snapshot','test_2'