Hbase数据迁移

举报
李国有 发表于 2020/04/27 09:53:51 2020/04/27
【摘要】 Hbase数据迁移1.通过copytable实现copyTable也是属于HBase数据迁移的工具之一,以表级别进行数据迁移。copyTable的本质也是利用MapReduce进行同步的,与DistCp不同的时,它是利用MR去scan 原表的数据,然后把scan出来的数据写入到目标集群的表。这种方式也有很多局限,如一个表数据量达到T级,同时又在读写的情况下,全量scan表无疑会对集群性能造成...

Hbase数据迁移

1.通过copytable实现

copyTable也是属于HBase数据迁移的工具之一,以表级别进行数据迁移。copyTable的本质也是利用MapReduce进行同步的,与DistCp不同的时,它是利用MR去scan 原表的数据,然后把scan出来的数据写入到目标集群的表。这种方式也有很多局限,如一个表数据量达到T级,同时又在读写的情况下,全量scan表无疑会对集群性能造成影响。

详细参数如下:

Options:
  rs.class hbase.regionserver.class of the peer cluster
  specify if different from current cluster
  rs.impl hbase.regionserver.impl of the peer cluster
  startrow the start row
  stoprow the stop row
  starttime beginning of the time range (unixtime in millis)
  without endtime means from starttime to forever
  endtime end of the time range. Ignored if no starttime specified.
  versions number of cell versions to copy
  new.name new table's name
  peer.adr Address of the peer cluster given in the format
  hbase.zookeeper.quorum:hbase.zookeeper.client.port:zookeeper.znode.parent
  families comma-separated list of families to copy
  To copy from cf1 to cf2, give sourceCfName:destCfName.
  To keep the same name, just give "cfName"
  all.cells also copy delete markers and deleted cells
  bulkload Write input into HFiles and bulk load to the destination table

Args:
  tablename Name of the table to copy

Examples:
  To copy 'TestTable' to a cluster that uses replication for a 1 hour window:
  $ hbase org.apache.hadoop.hbase.mapreduce.CopyTable --starttime=1265875194289   --endtime=1265878794289 --peer.adr=server1,server2,server3:2181:/hbase --families=myOldCf:myNewCf,cf2,cf3   TestTable
  For performance consider the following general option:
  It is recommended that you set the following to >=100. A higher value uses   more memory but
  decreases the round trip time to the server and may increase performance.
  -Dhbase.client.scanner.caching=100
  The following should always be set to false, to prevent writing data twice,   which may produce
  inaccurate results.
  -Dmapreduce.map.speculative=false

从上面参数,可以看出,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"

 

 

 

 

 

 

 

 

 

 

 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。