export default用法vue_用Export和Import工具来迁移不同版本HBase之间的数据

用Export和Import工具来迁移不同版本HBase之间的数据

1. 前言

有关HBase数据迁移的方案,零零总总不下好几种。如最简单的CopyTable,最高效的ExportSnapshot,最方便的Replication,以及接下来要为大家重点分享的Export和Import。命令的使用很简单,这里我只是单纯地记录下解决这个问题的思路,希望能给予你启迪,也希望我能把其持续修剪,直至长成参天大树的样子。我们此次数据迁移的场景是,HBase线上集群(2.1)迁移数据至HBase灾备集群(1.2),由于是跨大版本的数据迁移,在我们以往的测试中,CopyTable和ExportSnapshot两种方案直接就被pass掉了(可能是由于两个版本的HBase的底层HFile文件格式的不兼容,这两种方式都无法达到预期的效果)。又由于涉及大量历史数据的迁移,Replication显然也不合适。在确定使用Export/Import的数据迁移方案之前,我们还测试了用Spark读HBase表转换成RDD,然后再生成HBase的底层文件——HFile,最后使用BulkLoad的命令,实现数据的快速导入。但在具体测试的时候,不管是使用cdh的hbase-spark模块,还是使用shc的spark读HBase,貌似都逃不掉数据倾斜的命运。两种方案的源码实现我没有深究,但应该大致应该类似,利用spark scan hbase 的表转换成RDD,每一个region的数据放进每一个RDD的partition下(我们设置的每一个region的最大大小是20G),RDD做shuffle的过程中,会报如下异常:233887b1c0cd7cd3f5e1737dcd6ec4f2.png网上的解释是这样的:6f04a8aac5c989c95d44c6cebdbcb0eb.png暂时没有找到更好的方法来解决这个问题,所以,Spark读HBase的这种方式暂时还停留在理论层面。最终,在已知的数据迁移方案里,Export和Import工具能满足我们跨版本的数据迁移需求,虽然它的效率很慢,对集群的影响也很大,但由于是灾备集群,这种缺点还在忍受的范围之内。

2. 我们的集群环境

在正式介绍相关命令使用的同时,还是先说一下我们集群的版本等软件环境,避免因为版本的差异,出现本文我没有记录到的异常。灾备集群HBase版本HBase 1.2.0-cdh5.13.1灾备集群Hadoop版本Hadoop 2.6.0-cdh5.13.1

线上HBase集群版本HBase 2.1.0-cdh6.3.2线上Hadoop集群版本Hadoop 3.0.0-cdh6.3.2

3. Export的命令介绍

Export命令运行时会根据设置的scan条件来扫描HBase的表,然后转换成SequenceFile的形式,SequenceFile只是纯粹的K,V格式的数据文件,它与HBase的版本无关。其内容大致如下图所示:1de8de070fb421ab612e168ba73e169b.pngrowkey 列簇名 字段名 数据

3.1 Export命令的基本使用

运行如下命令查看Export工具的基本使用:

hbase org.apache.hadoop.hbase.mapreduce.Export  -help

命令用法以及参数的解读如下(不同版本命令差异不大):

Usage: Export [-D ]*  [ [ []] [^[regex pattern] or [Prefix] to filter]]
扫描行存在两种过滤器,正则表达式和前缀
输出SequenceFile的压缩形式
-D mapreduce.output.fileoutputformat
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值