转载两篇相关文章:
第一篇、http://blog.nosqlfan.com/html/3014.html
HBase自带的export/import机制可以实现Backup Restore功能。而且可以实现增量备份。下面设增量备份的python脚本。
在这个脚本中,每天做增量备份,每个月15日做全备份。
import time import datetime from datetime import date import sys import os tablename=sys.argv[1] backupDst=sys.argv[2] today=date.today() if today.day == 15: //every month, we do a full backup backupSubFolder=backupDst+today.isoformat()+"-full" cmd="hbase org.apache.hadoop.hbase.mapreduce.Export %s %s"%(tablename,backupSubFolder) else: yesterday=datetime.date.today()- datetime.timedelta(days=1) todayTimeStamp=time.mktime(today.timetuple()) yesTimeStamp=time.mktime(yesterday.timetuple()) backupSubFolder=backupDst+today.isoformat() cmd="hbase org.apache.hadoop.hbase.mapreduce.Export %s %s %s"%(tablename,backupSubFolder,str(int(todayTimeStamp)*1000) print cmd os.system(cmd)
而Restore机制就更加简单:
hbase org.apache.hadoop.hbase.mapreduce.Import tablename restorefolder
要注意的是,做Restore时候,原始的表必须是创建好的。所以如果表本身被损坏,需要重新创建一个新的空表,再做Restore。
还有,必须在Hadoop-env.sh中配置好hbase和Zookeeper的路径.
把这个加到crontab里面,就可以实现每天定时备份了。
--------------------------------------------------我是分割线-----------------------------------------------------------
第二篇:http://koven2049.iteye.com/blog/1162904
hbase提供了导出表的方案,将指定的表导出到HDFS或本地,这样方便了备份或数据转移。
最快的方式是通过mapreduce来完成这件事,需要在hbase的conf中添加mapred-site.xml:
<property> <name>mapred.job.tracker</name> <value>192.168.0.1:9001</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/tmp/hadoop-${user.name}</value> </property>
【注意:不加也可以运行,加了搞不好还会出错】
然后执行:
1.hbase org.apache.hadoop.hbase.mapreduce.Export backup_table hdfs://192.168.0.1:9000/user/test/backup_table
数据被写到了相应的目录,一个region一个文件。默认为sequencefile。当然还可以选择对输出进行压缩等。
要将输出的数据导入某个hbase的表,需执行以下命令:
hbase org.apache.hadoop.hbase.mapreduce.Import backup_table hdfs://192.168.0.1:9000/user/test/backup_table
此时再看对应的表,己经有数据了。