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

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

热备,scanputmapreduce操作,无法保证一致性,

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

基于dumphdfs文件,进行数据恢复(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操作的WALcompact&flushGC等资源开销。

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

表在线,支持增量操作

 

你可能感兴趣的:(数据备份,hbase)