HBase跨集群迁移调研方案

HBase跨集群迁移调研方案回顾

迁移目的

HBase跨集群平滑迁移

方案

方案一

双写:replication

历史数据:Snapshot——>exportSnapshot——>clone_snapshot——>copyTable

方案二

双写:replication

历史数据:Snapshot——>exportSnapshot——>bulkload

操作命令

snapshot

#制作snapshot
hbase> snapshot 'myTable', 'myTableSnapshot-122112'
#显示所有snapshot
hbase> list_snapshots
#发送snapshot到其他集群
$ bin/hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot MySnapshot -copy-to hdfs://srv2:8082/hbase -mappers 16 -bandwidth 200
#在目标集群clone snapshot
hbase> clone_snapshot 'myTableSnapshot-122112', 'myNewTestTable'
#在目标机还原snapshot
hbase> disable 'myTable'
hbase> restore_snapshot 'myTableSnapshot-122112'
hbase> enable 'myTable'
#目标集群copy table
$ bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable --starttime=1265875194289 --endtime=1265878794289 --peer.adr=server1,server2,server3:2181:/hbase --families=myOldCf:myNewCf,cf2,cf3 TestTable
#目标机器执行bulkload snapshot
bin/hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles  

replication

#Add a new replication peer which serial flag is true
hbase> add_peer '1', CLUSTER_KEY => "server1.cie.com:2181:/hbase", SERIAL => true
#Set a replication peer’s serial flag to true(数据顺序)
hbase> set_peer_serial '1', true
#验证replication数据
$ HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath` "${HADOOP_HOME}/bin/hadoop" jar "${HBASE_HOME}/hbase-mapreduce-VERSION.jar" verifyrep --starttime= --endtime= --families=  

优缺点

方案一:开启replication,snapshot需要先clone到新表,然后再copyTable到旧表

缺点:restore_snapshot会覆盖replication新数据;通过MR执行,速度慢,不如bulkload执行效率高
优点:表级操作
方案二:开启replication,snapshot通过bulkload到数据表,不会覆盖新数据

优点:导入数据数据速度非常快;在新版本中已经支持整表bulkload方案(CDH-6.0及以上,hBase2.0)
缺点:旧版本不支持整表bulkload方案,需要代码添加功能;再整表bulkload时默认最大HFILE个数32,需要根据需要调整修改。参数:
hbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily

最终方案

目标

采用方案:方案二:

通过bulkload整表导入从集群导入的snapshot快照,完成数据迁移;

目标:平滑迁移,双写基础上,尽可能简洁操作,流程短,效率高;

CDH如何支持整表bulkload操作

参考:https://www.jianshu.com/p/612a8f4ad275

你可能感兴趣的:(HBASE)