hbase_数据备份(copyTable)

时间:2022-11-28 08:28:28

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

该方式,原表、目标表的名称相同

全部使用方式如下:

hbase_数据备份(copyTable)

MRmap数量与表的region数相同,与HFile文件个数无关。

CopyTable工具采用scan查询,写入新表时采用putdelete API,全是基于hbaseclient api进行读写,无法使用Import工具的bulk导入。