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

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

![](https://upload-images.jianshu.io/upload_images/9028759-4fb9aa8ca3777969.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

## 环境使用

现在环境上面有一张表`logTable`,有一个`ext`列簇

但是没有做预分区,虽然可以强制拆分表,但是split的start,end范围无法精确控制。

## 方式一 (先导出再导出)

1. 创建导出目录

```

hadoop fs -mkdir /tmp/hbase-export

```

2. 备份表数据

使用`hbase`内置的`mr`命令,会默认导出到`hdfs`中

```

hbase org.apache.hadoop.hbase.mapreduce.Export \

-D hbase.mapreduce.scan.column.family=ext \

logTable hdfs:///tmp/hbase-export/logTable

```

3. 删除表

```

disable 'logTable'

drop 'logTable'

```

4. 创建表

数据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 => ['20', '40', '60', '80', 'a0', 'c0', 'e0']

```

5. 导出备份数据

```

hbase org.apache.hadoop.hbase.mapreduce.Import logTable hdfs:///tmp/hbase-export/logTable

```

## 注意事项

1. 默认导出所有列簇,可通过指定`-D hbase.mapreduce.scan.column.family=ext,info`参数导出。

2. 如果另一张表没有源表对应的列簇将会出错。

---

![](https://upload-images.jianshu.io/upload_images/9028759-07315bb8dadcd082.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • > 有没有这样一样情况,把一个集群中的某个表导到另一个群集中,或者hbase的表结构发生了更改,但是数据还要,比如...
    kikiki5阅读 150评论 0 1
  • > 有没有这样一样情况,把一个集群中的某个表导到另一个群集中,或者hbase的表结构发生了更改,但是数据还要,比如...
    kikiki5阅读 188评论 0 2
  • > 有没有这样一样情况,把一个集群中的某个表导到另一个群集中,或者hbase的表结构发生了更改,但是数据还要,比如...
    kikiki5阅读 119评论 0 3
  • > 有没有这样一样情况,把一个集群中的某个表导到另一个群集中,或者hbase的表结构发生了更改,但是数据还要,比如...
    kikiki5阅读 165评论 0 2
  • > 有没有这样一样情况,把一个集群中的某个表导到另一个群集中,或者hbase的表结构发生了更改,但是数据还要,比如...
    kikiki5阅读 137评论 0 3