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 |
|
merge_region是一个异步操作,命令执行之后会立刻返回,用户需要一段时间之后手动检测合并是否成功。默认情况下merge_region命令只能合并相邻的两个Region,非相邻的Region无法执行合并操作。同时,HBase也提供了一个可选参数true,使用此参数可以强制让不相邻的Region进行合并,因为该参数风险较大,不建议在生产环境使用。
三、参考
[HBase原理与实践](HBase原理与实践 (豆瓣))