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目录中恢复表的元数据,然后重启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
该方式,原表、目标表的名称相同
全部使用方式如下:
MR的map数量与表的region数相同,与HFile文件个数无关。
CopyTable工具采用scan查询,写入新表时采用put和delete API,全是基于hbase的client api进行读写,无法使用Import工具的bulk导入。