当前位置:   article > 正文

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

hbase的export工具是对表进行在线扫描吗

用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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/969922
推荐阅读
相关标签
  

闽ICP备14008679号