您的位置:首页 > 其它

HBase数据备份恢复的几种机制总结

2013-10-21 17:27 309 查看
1、
replication,

通过类似mysql
主从复制方式进行复制,基于HLog

在应用场景个人感觉比较重要的一点是可以隔离计算分析型的操作和实时性操作带来的影响。

对于DDL操作不做复制,过实时读取hlog中的entry来解析变更的数据然后发送到从集群中去。



2、
distcp,

表数据文件的copy

./hadoopdistcp hdfs://wxlab58:9100/hbase/lsmp_lottery_new_3/ hdfs://wxlab24:9100/hbase/lsmp_lottery_new_3/
<property>
<name>dfs.permissions</name>

<value>false</value>
</property>
或者
$ hadoop fs-chmod 777 /user/hadoop
然后在目的hbase上执行./hbase org.jruby.Mainbin/add_table.rb /hbase/lsmp_lottery_new_3,更新元数据表meta
生成meta信息后,重启hbase
表可以不在线,是mapreuce操作,不可垮表操作,全量操作
3、 copyTable,

热备,scan和put的mapreduce操作,无法保证一致性,

增量copy, –starttime and –endtime arguments

只copy部分cf,–families=srcCf1,srcCf2


$bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable [--starttime=X][--endtime=Y] [--new.name=NEW] [--peer.adr=ADR] tablename
$HADOOP_HOME/bin/hadoopjar $HBASE_HOME/hbase-
0.92.1.jarcopytable --families=n --peer.adr=l-master1:2181:/
hbase--new.name=hly_temp2 hly_temp
表必须在线,是mapreduce操作,可以跨表操作,可以增量操作
4、 export,

把表数据导出到hdfs文件中(mapreduce操作)

数据被写到了相应的目录,一个region一个文件。默认为sequencefile。可以选择对输出进行压缩等。

bin/hbaseorg.apache.hadoop.hbase.mapreduce.Export <tablename> <outputdir>[<versions> [<starttime> [<endtime>]]]

$HADOOP_HOME/bin/hadoopjar $HBASE_HOME/hbase-
0.92.1.jarexport -D mapred.output.compress=true -D mapred.output.
compression.codec=org.apache.hadoop.io.compress.BZip2Codec-D
mapred.output.compression.type=BLOCK hly_temp /backup/hly_temp
表必须在线(热备),是mapreduce操作,可以跨表操作,可以增量操作


5、 import,

基于dump的hdfs文件,进行数据恢复(mapreduce操作)

bin/hbaseorg.apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir>

$HADOOP_HOME/bin/hadoopjar $HBASE_HOME/hbase-
0.92.1.jarimport hly_temp /backup/hly_temp
表必须在线(热备),是mapreduce操作,可以跨表操作,可以实现增量操作


6、 Bulkload tool,

Bulkload对于添加表的大量的数据效率很高,绕过put操作的WAL、compact&flush、GC等资源开销。
一个region一个HFile,在bulk load时候,自动把HFile
mv到对应region的目录下。
A、通过mapreduce,生成HFile,后bulkload
HTabletable = new HTable(conf, tableName);
job.setReducerClass(PutSortReducer.class);
PathoutputDir = new Path(args[2]);
FileOutputFormat.setOutputPath
(job,outputDir);
job.setMapOutputKeyClass
(ImmutableBytesWritable.class);
job.setMapOutputValueClass(Put.class);
HFileOutputFormat.configureIncrementalLoad(job, table);

hadoop jar hbase-VERSION.jar completebulkload /user/todd/myoutput mytable
或者LoadIncremental.doBulkLoad把HFile load到HBase表中。


B、importtsv通过mapreduce,直接导入到表中
$HADOOP_HOME/bin/hadoopjar $HBASE_HOME/hbase-
0.92.1.jarimporttsv \
-Dimporttsv.columns=HBASE_ROW_KEY,t:v01,t:v02,t:v03,t:v04,t:v0
5,t:v06,t:v07,t:v08,t:v09,t:v10,t:v11,t:v12,t:v13,t:v14,t:v15,t:v1
6,t:v17,t:v18,t:v19,t:v20,t:v21,t:v22,t:v23,t:v24\
hly_temp\
/user/hac/input/2-1
C、importtsv通过mapreduce生成HFile,后bulkload到表中
$HADOOP_HOME/bin/hadoop jar$HBASE_HOME/hbase-
0.92.1.jar importtsv \
-Dimporttsv.bulk.output=/user/hac/output/2-1\
-Dimporttsv.columns=HBASE_ROW_KEY,t:v01,t:v02,t:v03,t:v04,
t:v05,t:v06,t:v07,t:v08,t:v09,t:v10,t:v11,t:v12,t:v13,t:v14,
t:v15,t:v16,t:v17,t:v18,t:v19,t:v20,t:v21,t:v22,t:v23,t:v24\
hly_temp \
/user/hac/input/2-1

$HADOOP_HOME/bin/hadoop jar$HBASE_HOME/hbase-
0.92.1.jar completebulkload \
/user/hac/output/2-1 \
hly_temp
表在线,支持增量操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: