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

有没有这样一样情况,把一个集群中的某个表导到另一个群集中,或者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 => ['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. 如果另一张表没有源表对应的列簇将会出错。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一直不是詹姆斯的球迷,可能是因为他的球风不那么潇洒飘逸,也可能是因为它10年选择了热火,联手韦德波什抱团去夺取总冠...
    录音笔阅读 1,670评论 0 2
  • 青禾 矗立在岸上, 春水, 泛动着柔波, 青禾, 舞动着华尔兹, 春水, 奏响了圆舞曲, 而我, 在角落里沉默, ...
    Emptyvalley阅读 1,652评论 1 4
  • 距离中考越来越近了,教室黑板上显示倒计时48天。中三学生每天起得比鸡早,睡得比狗晚,看着让人心疼。 寝室,教室,厕...
    白玉兰_9fc7阅读 4,147评论 0 1
  • 两种方式 driver.findElement(By.xpath("//a[@onclick='动作方法名()']...
    放开那个电扇阅读 3,081评论 0 2

友情链接更多精彩内容