对HBase表在原表的基础上进行预分区缩减
目的
在原表的基础上对分区即region数进行调整。本次操作的表为ns1命名空间下的test表,当前为40个分区,预期操作之后为5个分区。
注意事项
以下案例仅针对于普通表,索引表、Phoenix表,或使用了协处理器的场景需要自行验证。
影响
操作过程中涉及表重建,表重建未完成前业务读写不可用。
操作步骤
1.进入hbase原生界面保存表描述信息;
2.从原生界面获取表的startKey信息;
3.将startKey保存到splits.txt文档,按预期修改文档;
- region的startKey和endKey将其划分为一个区间,缩减表的region数,即通过增大单个region的区域来减少分区数,下图所示两个region的区间[00000000000000000002621440,00000000000000000005242880]和[00000000000000000005242880,00000000000000000007864320],将两个region合并,则分区变为[00000000000000000002621440,00000000000000000007864320]
- 在进行合并时,只能合并相邻的region,需要预估多个region合并为一个region后,该region的大小不要超过10G;
- 本次操作的表每个region数据均衡,将40个region合并为5个region,则每8个连续的region合并为一个region即可。图中灰色部分为需要删除的startKey;
- 将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文件移动到统一目录下,一次性导入;
- 新建目录,有几个列族,就需要新建几个子目录,hdfs dfs -mkdir /backup/hfile/列族1,hdfs dfs -mkdir /backup/hfile/列族2.....。
hdfs dfs -mkdir /backup/hfile/info
- 将所有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行
- 点赞
- 收藏
- 关注作者
评论(0)