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
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