Hbase 迁移数据[导出,导入]

作者: 大猪大猪 | 来源:发表于2019-01-22 00:08 被阅读7次

    有没有这样一样情况,把一个集群中的某个表导到另一个群集中,或者hbase的表结构发生了更改,但是数据还要,比如预分区没做,导致某台RegionServer很吃紧,Hbase的导出导出都可以很快的完成这些操作。

    流程图

    环境使用

    现在环境上面有一张表logTable,有一个ext列簇
    但是没有做预分区,虽然可以强制拆分表,但是split的start,end范围无法精确控制。

    操作步骤

    1. 创建导出目录
    hadoop fs -mkdir /tmp/hbase-export
    
    1. 备份表数据
      使用hbase内置的mr命令,会默认导出到hdfs
    hbase org.apache.hadoop.hbase.mapreduce.Export \
     -D hbase.mapreduce.scan.column.family=ext \ 
    logTable hdfs:///tmp/hbase-export/logTable
    
    1. 删除表
    disable 'logTable'
    drop 'logTable'
    
    1. 创建表
      数据3天过期,可以根据RegionServer的个数做预分区,假设有8台,则使用下面的方式。
      由于我们是使用MD5("uid")前两位作为打散,范围为00~ff 256个分片,可以使用如下方式。
    # scala shell 创建方式
    (0 until 256 by 256/8).map(Integer.toHexString).map(i=>s"0$i".takeRight(2))
    

    hbase创表

    create 'logTable',{ \
      NAME => 'ext',TTL => '3 DAYS', \
      CONFIGURATION => {
      'SPLIT_POLICY' => 'org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy', \
      'KeyPrefixRegionSplitPolicy.prefix_length' => '2' 
      }, \
      COMPRESSION => 'SNAPPY' \
    }, \ 
    SPLITS => ['00','20', '40', '60', '80', 'a0', 'c0', 'e0']
    
    1. 导出备份数据
    hbase org.apache.hadoop.hbase.mapreduce.Import logTable hdfs:///tmp/hbase-export/logTable
    

    注意事项

    1. 默认导出所有列簇,可通过指定-D hbase.mapreduce.scan.column.family=ext,info参数导出。
    2. 如果另一张表没有源表对应的列簇将会出错。

    相关文章

      网友评论

        本文标题:Hbase 迁移数据[导出,导入]

        本文链接:https://www.haomeiwen.com/subject/pcjkjqtx.html