内容纲要
概要说明
相比region拆分,合并region的使用场景比较有限,最典型的一个应用场景是:在某些业务中本来接收写入的region在之后很长时间都不再接收任何写入,而且region上的数据因为TTL过期被删除。
这种场景下的region实际上没有任何存在的意义,称为空闲region,一旦集群中空闲region很多,就会导致集群管理运维成本增加。
此时可以使用合并功能将这些region与相邻的region合并,减少集群中空闲region的个数。
介绍两种 merge_region 的操作:
详细说明
- hyperbase 服务不需要停止;
- HMaster 和 regionserver 都参与在线 region 的合并过程;
- 在线合并 region 可以手动通过 hbase shell 执行
merge_region命令,或者使用 DSTools 中的mergeRegion.sh脚本; - merger_region 只能合并
相邻的两个 region,如果是非相邻的需要加第三个参数true,但是不建议这么操作; - 控制好集群内 region 数量,保证 merge 完之后的 region 上线后,尽量不超过 1000g个region,每个 RS 节点;
具体操作
hbase 表和 hyperdrive 表的操作都是一样的。本文档以 hbase 表 hbase_merge_test 为例演示在线合并 region 的过程。
1、查看hyperbase表的原始状态
通过active HMaster的60010页面,查看 hbase_merge_test 表合并前有7个region,本次在线合并7548f41d729a72f50aae0b9d3244f10f 和 c16258a84e89200f0b5ce2c7c90ce2cc 两个region;

2、通过hbase shell命令在线合并region
- 本案例中描述通过 hbase shell命令在线合并region。
- 在线合并的传参是region的hash值,就是页面上最后两个
.之间的字符串部分,也可以根据hdfs数据目录下的文件名(/hyperbase1/data/default/<表名>)来判断。

merge_region '7548f41d729a72f50aae0b9d3244f10f','c16258a84e89200f0b5ce2c7c90ce2cc'
3、在线合并完成后检查表是否正常
合并完之后再次查看60010页面region信息,已经显示是最新的,合并后的region数为6。
