Region合并

一、What

在线合并Region是HBase非常重要的功能之一。相比Region分裂,在线合并Region的使用场景比较有限,最典型的一个应用场景是,在某些业务中本来接收写入的Region在之后的很长时间都不再接收任何写入,而且Region上的数据因为TTL过期被删除。这种场景下的Region实际上没有任何存在的意义,被称为空闲Region。一旦集群中空闲Region很多,就会导致集群管理运维成本增加。此时,可以使用在线合并功能将这些Region与相邻的Region合并,减少集群中空闲Region的个数。

二、How

从原理上看,Region合并的主要流程如下:

1)客户端发送merge请求给Master。

2)Master将待合并的所有Region都move到同一个RegionServer上。

3)Master发送merge请求给该RegionServer。

4)RegionServer启动一个本地事务执行merge操作。

5)merge操作将待合并的两个Region下线,并将两个Region的文件进行合并。

6)将这两个Region从hbase:meta中删除,并将新生成的Region添加到hbase:meta中。

7)将新生成的Region上线。

HBase使用merge_region命令执行Region合并,如下:

1
2
$ hbase> merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME'
$ hbase> merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME', true

merge_region是一个异步操作,命令执行之后会立刻返回,用户需要一段时间之后手动检测合并是否成功。默认情况下merge_region命令只能合并相邻的两个Region,非相邻的Region无法执行合并操作。同时,HBase也提供了一个可选参数true,使用此参数可以强制让不相邻的Region进行合并,因为该参数风险较大,不建议在生产环境使用。

三、参考

[HBase原理与实践](HBase原理与实践 (豆瓣))


Region合并
https://kuberxy.github.io/2022/04/08/Region合并/
作者
Mr.x
发布于
2022年4月8日
许可协议