对HBase表在原表的基础上进行预分区缩减

举报
Pan-Xing 发表于 2024/08/03 19:35:39 2024/08/03
【摘要】 目的在原表的基础上对分区即region数进行调整。本次操作的表为ns1命名空间下的test表,当前为40个分区,预期操作之后为5个分区。注意事项以下案例仅针对于普通表,索引表、Phoenix表,或使用了协处理器的场景需要自行验证。影响操作过程中涉及表重建,表重建未完成前业务读写不可用。操作步骤1.进入hbase原生界面保存表描述信息;2.从原生界面获取表的startKey信息;3.将star...

目的

在原表的基础上对分区即region数进行调整。本次操作的表为ns1命名空间下的test表,当前为40个分区,预期操作之后为5个分区。

注意事项

以下案例仅针对于普通表,索引表、Phoenix表,或使用了协处理器的场景需要自行验证。

影响

操作过程中涉及表重建,表重建未完成前业务读写不可用。

操作步骤

1.进入hbase原生界面保存表描述信息;

2.从原生界面获取表的startKey信息;

3.将startKey保存到splits.txt文档,按预期修改文档;

  1. region的startKey和endKey将其划分为一个区间,缩减表的region数,即通过增大单个region的区域来减少分区数,下图所示两个region的区间[00000000000000000002621440,00000000000000000005242880]和[00000000000000000005242880,00000000000000000007864320],将两个region合并,则分区变为[00000000000000000002621440,00000000000000000007864320]
  2. 在进行合并时,只能合并相邻的region,需要预估多个region合并为一个region后,该region的大小不要超过10G;
  3. 本次操作的表每个region数据均衡,将40个region合并为5个region,则每8个连续的region合并为一个region即可。图中灰色部分为需要删除的startKey;
  4. 将splits.txt文档上传至客户端目录,如/opt/splits.tx

3.根据上述步骤生成新的建表语句:create 表描述信息,SPLITS_FILE=>'splits.txt';

    create 'ns1:test',{NAME => 'info',BLOOMFILTER => 'NONE',DATA_BLOCK_ENCODING => 'FAST_DIFF',TTL => '10368000',COMPRESSION => 'SNAPPY'},SPLITS_FILE=>'/opt/splits.txt'

4.停掉ns1:test表的所有写入业务,客户端使用命令 hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'ns1:test' 统计表数据条数为33149452行(如果业务不停,数据会有变化,不具备参考意义);

       

5.在HDFS上创建临时目录;

   hdfs dfs -mkdir  /backup/tmp

6.进入hbase shell下线表;

   disable 'ns1:test'

7.移动表目录至临时目录下;

   hdfs dfs -mv /hbase/data/ns1/test /backup/tmp/

   

8.对/backup/tmp/做快照备份;

   开启目录快照:hdfs dfsadmin -allowSnapshot /backup/tmp/

   创建快照:hdfs dfs -createSnapshot /backup/tmp/ test_bak

   查看快照:hdfs dfs -ls /backup/tmp/.snapshot/test_bak

   

9.进入hbase shell删除表;

   drop 'ns1:test'

10.创建新表;

   create 'ns1:test',{NAME => 'info',BLOOMFILTER => 'NONE',DATA_BLOCK_ENCODING => 'FAST_DIFF',TTL => '10368000',COMPRESSION => 'SNAPPY'},SPLITS_FILE=>'/opt/splits.txt'     

11.将所有region下的HFile文件移动到统一目录下,一次性导入;

  1.   新建目录,有几个列族,就需要新建几个子目录,hdfs dfs -mkdir  /backup/hfile/列族1,hdfs dfs -mkdir  /backup/hfile/列族2.....。

           hdfs dfs -mkdir  /backup/hfile/info

  1. 将所有region下的HFile文件移动到新建目录下,hdfs dfs -mv /backup/tmp/TABLENAME/*/列族名1/*  /backup/hfile/列族名1。

           hdfs dfs -mv /backup/tmp/test/*/info/* /backup/hfile/info

         

12.将HFile文件导入到新表,数据导入的时候表必须是enable状态;

     hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles -Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=80000 /backup/hfile ns1:test

     

13.客户端使用命令 hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'ns1:test' 统计表数据条数为33149452行(如果操作期间业务不停,数据会有变化,不具备参考意义);

     

回退场景

1.利用快照恢复/backup/tmp/目录;

   hdfs dfs -cp -ptopax /backup/tmp/.snapshot/test_bak/* /backup/tmp

2.将表目录挪回原路径

   hdfs dfs -mv /backup/tmp/test /hbase/data/ns1

3.修复hbase元数据(HBase2.x版本只能离线修复)

   hbase hbck -fixMeta ns1:test

   

4.客户端使用命令 hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'ns1:test' 统计表数据条数为33149452行

   

   

  


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。