分享

Hbase数据备份和恢复

fanbells 2014-4-10 09:38:18 发表于 实操演练 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 4 70351

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









已有(4)人评论

跳转到指定楼层
luxury 发表于 2014-4-10 10:42:49
回复

使用道具 举报

Wyy_Ck 发表于 2016-12-21 09:41:22
part-m-00000 这个导出的文件 怎么查看呢  直接cat的话 就乱码了
回复

使用道具 举报

fylanyu 发表于 2016-12-21 10:26:38
Wyy_Ck 发表于 2016-12-21 09:41
part-m-00000 这个导出的文件 怎么查看呢  直接cat的话 就乱码了

hbase本质还是hadoop文件。需要在hadoop上查看文件的内容。

感觉对hdfs理解的还不够。
hdfs是分布式文件系统。
如同我们的
磁盘,对应hdfs
磁盘文件对应hdfs文件
磁盘存储的本质二进制文件,如果让楼主看更看不懂。
同理个part-m-00000也是一个hdfs的底层文件,因此需要通过hdfs命令来查看
hdfs -cat /文件名

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条