1、Hbase中的备份策略有哪些,各有什么特点?
hbase中的数据备份策略有两种:关闭集群进行全备份;在线对集群进行备份。 1、进行关机备份时,必须全部关闭Hbase集群,或者disable所有表,然后通过distcp命令将Hbase目录下的内容复制到另外或者同一个集群的不同目录就可以了。 2、在线备份,可以通过CopyTable 命令将被内容复制到另一张表中;或者导出为Hdfs文件,再将文件导入到Hbase中; 优缺点: 进行全备份的好处是可以保持数据的完整性,但是需要关闭集群;在线备份不需要关闭集群,但是会存在数据丢失的风险。
2、如何进行操作?
distcp关机全备份 1、在新备份集群下建立一个文件夹,用来保存需要备份的数据: $HADOOP_HOME/bin/hadoop fs -mkdir /backup 2、在旧集群执行: $HADOOP_HOME/bin/hadoop distcp hdfs://maste:9000/hbase(hbase-site.xml文件中hbase.rootdir的属性值) hdfs://backup:9000/backup 执行命令以后hadoop会启动一个MapReduce任务,可以在50030页面进行查看; 3、在新集群执行: $HADOOP_HOME/bin/hadoop fs -ls /backup 会发现backup目录下有一个hbase目录 4、如果需要恢复数据的话,直接在新集群执行: $HADOOP_HOME/bin/hadoop distcp hdfs://backup:9000/backup/hbase hdfs://maste:9000/ 就可以了。 CopyTable备份 使用CopyTable可以将一张表的数据备份到另外一张表,也可以备份到另一集群的其他表中,使用CopyTable进行备份需要注意:
CopyTable不支持多版本。 1、在新备份集群创建一张表,该表需要与备份表相同的结构: create 'newtable','a','b'
2、使用命令进行全表备份: $HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=newtable --peer.adr=zookeeperhbase.zookeeper.quorum:2181:/hbase oldtable 也可以只备份指定的某个列簇,下面的命令表示备份oldtable表中的列簇a到newtable表中 $HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable --families=a --new.name=newtable --peer.adr=zookeeperhbase.zookeeper.quorum:2181:/hbase oldtable
备份为Hdfs文件,支持数据多版本 1、使用Export命令将表数据写为文件 $HBASE+HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.Export oldtable /backup 查看备份文件会发现backup文件夹下有三个文件(_SUCCESS、_logs、part-m-00000): hadoop fs -ls /backup 2、使用Import命令导入存储文件,恢复Hbase数据 $HBASE+HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.Import newtable /backup
|