内容纲要
概要说明
本文介绍离线合并 region 的操作方法;
详细说明
介绍两种 merge_region 的操作:
离线合并region的前提
- hyperbase 服务处于停止状态;
- hdfs 上 /hyperbase1/data 目录表信息是存在的;
- 控制好集群内 region 数量,保证 merge 完之后的 region 上线后,尽量不超过单个RS 1000个的水平;
离线合并region的影响
- 离线合并过程中,hyperbase 服务处于不可用状态;
- 上线过程中可能会出现大量 RIT,需要修复;
具体操作
hbase 表和 hyperdrive 表的操作都是一样的。本文档以 hbase 表 hbase_merge_test 为例演示离线合并 region 的过程。
1、查看hyperbase表的原始状态
-
HMaster的60010页面查看
通过hyperbase服务的 active HMaster角色60010页面的【Table】栏查看,可以看到 hbase_merge_test 表最开始有9个region。
-
通过HFile查看meta中表的region信息
通过下面命令查看,注意需要根据实际情况进行替换,不能直接复制。### hbase org.apache.hadoop.hbase.io.hfile.HFile -e -f | grep| awk -F/ '{print substr($1,4)}' | uniq hbase org.apache.hadoop.hbase.io.hfile.HFile -e -f /hyperbase1/data/hbase/meta/1588230740/info/930ddff9cae84d0a8821ff51b21eefc9 | grep hbase_merge_test | awk -F/ '{print substr($1,4)}' | uniq 
2、离线合并region前确保 hbase:meta 中表的状态一致
-
如果第一步中,【HMaster的60010页面查看】和【通过HFile查看meta中表的region信息】获取到的表的region信息是一致的,则不需要操作此步骤。
-
此步骤是在hyperbase停止的情况下操作的。
-
需要准备好dstool工具,可以参考该文档:hyperbase运维之dstool的使用
cd TDH-Client/dstools/bin ./runDSTools.sh hbase:meta
3、开始离线合并region
- 此合并操作,要求对相邻的两两region进行合并。
- 如果region name中包含二进制\x00之类的要做转义,如\x00改成\x00;
- region的信息中有空格,需要在region外面包一层引号;
- 如果要多次merge,第一轮merge结束后,离线运行dstool,更新这张表在meta表中新的region信息(merge后,region信息已经发生变化, 需要重新生成),再重复下面的步骤。
-
本案例中合并最前面的两个region和最后面的两个region。
### hbase org.apache.hadoop.hbase.util.Merge [-Dfs.defaultFS=hdfs://nn:port]" " " " hbase org.apache.hadoop.hbase.util.Merge hbase_merge_test "hbase_merge_test,,1599184648498.d3196371c5466517810311ad2db04310." "hbase_merge_test,220502199001012292,1599182367446.6749275ef1389fd8dd68b5476b6a3e3a."
4、离线运行dstool,更新这张表在meta表中新的region信息
- merge后,region信息已经发生变化, 需要重新生成,以下两步都要操作。
-
本案例操作了2次merge,所以最终region数是7个。
cd TDH-Client/dstools/bin ./runDSTools.sh hbase_merge_test ./runDSTools.sh
5、启动hyperbase服务,并检查服务是否异常
-
hyperbase启动成功后可以先运行下DSTools,确保没有异常。
cd TDH-Client/dstools/bin ./runDSTools.sh hbase_merge_test ./runDSTools.sh -
通过active HMaster的60010页面查看表是否正常
可以看到第一个region和最后一个region是合并后的。

-
可以正常查询hbase表,合并完成。
