(转载)hbase备份恢复
hbase本身提供的接口
Usage: Import [options] <tablename> <inputdir>By default Import will load data directly into HBase. To instead generate
HFiles of data to prepare for a bulk data load, pass the option:
-Dimport.bulk.output=/path/for/output
For performance consider the following options:
-Dmapred.map.tasks.speculative.execution=false
-Dmapred.reduce.tasks.speculative.execution=false
导出
hbase org.apache.hadoop.hbase.mapreduce.Driver export 'tablename' Path/to/dumpfile <versions>
其中数据文件位置可为本地文件目录,也可以分布式文件系统hdfs的路径。
当其为前者时,直接指定即可,也可以加前缀file:///而当其为后者时,必须明确指明hdfs的路径,例如hdfs://mymaster:9000/path
导入
hbase org.apache.hadoop.hbase.mapreduce.Driver import 'tablename' Path/to/dumpfile
python调用export脚本
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)
表迁移至另一集群
把某个表(table1)从集群1迁移到集群2(两个集群互相看不见),步骤如下拷贝集群1的表文件到本地磁盘, 拷贝之前要停掉集群1的hbase服务,否则会丢失数据
hadoop fs -copyToLocal /hbase/table1 /home/fred/hb_bak/table1
对于文件操作,很简单吧,随便你怎么去拷贝来拷贝去
如果集群2中也有对应的表文件,那么删除掉,然后拷贝
hadoop fs -rmr /hbase/table1
hadoop fs -copyFromLocal /home/fred/hb_bak/table1 /hbase/table1
到hbase的bin目录下,重置该表在.META.表中的分区信息
hbase org.jruby.Main add_table.rb /hbase/table1
add_table.rb 这个文件在新版本中的HBase中没有了,不过可以从http://svn.apache.org/repos/asf/hbase/branches/former_0.20/bin/add_table.rb 下载,并保存到HBase的bin目录下。
另外:
如果表的数据量过大呢? 那么按照该表在HDFS中的文件夹数据,分批拷贝。
如果两个集群可以互相通信呢?那么更爽了,直接使用distcp对拷,是并行的。
HBase Backup Options
http://hbase.apache.org/book/ops.backup.html如果你打算部署HBase,那么你一定要考虑如何备份的问题,下面是作者列举的他所知道的一些备份方式,如果有遗漏的,欢迎补充。
- Export
- Copy Table
- Distcp
- Backup from Mozilla
- Cluster Replication
- Table Snapshot
- HDFS Replication