Hbase数据迁移
Hbase数据迁移
1.通过copytable实现
copyTable也是属于HBase数据迁移的工具之一,以表级别进行数据迁移。copyTable的本质也是利用MapReduce进行同步的,与DistCp不同的时,它是利用MR去scan 原表的数据,然后把scan出来的数据写入到目标集群的表。这种方式也有很多局限,如一个表数据量达到T级,同时又在读写的情况下,全量scan表无疑会对集群性能造成影响。
详细参数如下:
Options: Args: Examples: |
从上面参数,可以看出,copyTable支持设定需要复制的表的时间范围,cell的版本,也可以指定列簇,设定从集群的地址,起始/结束行键等。参数还是很灵活的
下面是通过时间范围进行拷贝的场景,在源端添加数据如下图:
在源端执行copytable命令,通过starttime和endtime进行同步
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=Hmaster:2181:/hbase --starttime=1576030486383 --endtime=1576030564291 student |
执行成功如下图:
在目标端进行查看
2.通过快照同步
通过快照的方式进行数据迁移,是比较常用 ,效率比较高,这里主要使用ExportSnapshot命令进行数据迁移,ExportSnapshot也是HDFS层的操作,本质还是利用MR进行迁移,这个过程主要涉及IO操作并消耗网络带宽,在迁移时要指定下map数和带宽,不然容易影响其它业务问题,操作步骤如下
首先对表进行创建快照操作,如下图所示
hbase(main):009:0> snapshot "student_new","student_new_snapshot" |
通过命令查看目标端集群暂时没有student_new这张表
通过ExportSnapshot进行数据迁移操作,命令如下,此处要注意,在执行时使用的是hostname,保证集群内已经包含对端hostname才可以:
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot student_new_snapshot -copy-from hdfs://hslave1:8020/hbase -copy-to hdfs://qaslave1:8020/hbase -mappers 20 -bandwidth 50 -chuser hadoop -chgroup supergroup |
在目标端集群通过restore_snapshot进行还原操作,我们发现数据已经恢复
hbase(main):007:0> restore_snapshot "student_new_snapshot" |
但是这是目标端没有此表的情况下,如果目标端已经包含此表通过restore_snapshot会失败,需要disable掉此表,如下图
在正常业务场景中,表可能实时在用,没办法通过disable来实现,此处需要引入bulkload来实现
通过bulkload实现对snapshot的数据加载
前提依然需要通过ExportSnapshot将快照导入到目标集群,然后通过bulkload进行操作,具体方式如下:
测试数据,删除部分数据,并创建快照
通过ExportSnapshot进行数据迁移
此时我们要注意下输入日志的一点,目标集群的快照数据存放位置为archive目录下
我们在目标集群对数据进行恢复通过bulkload,命令如下,路径为上面标记的路径:
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles -Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=1024 hdfs://slave1:8020/hbase/archive/data/default/student_new/868eb15b0143e4057dbfc906c6b2c22c "student_new" |
- 点赞
- 收藏
- 关注作者
评论(0)