关于hbase的merge(region合并)
1、region的状态有以下几种
1)OFFLINE
region处于offline状态,not opening
2) OPENING
region处于正在被opened状态
3)OPEN
region处于打开状态,且RS已经通知Master
4) FAILED—OPEN
RS未成功open这个region
5)CLOSING
region处于正在关闭中
6)CLOSED
RS已经关闭RS且通知了master
7)FAILED—OPEN
RS close region失败
8) SPLITTING
RS通知了master当前region正在分裂
9) SPLIT
RS通知master当前region已经完成分裂
10)SPLITTING_NEW
当前region由于split原因,正在被创建中
11)MERGING
RS通知master当前region正在与另一个region合并
12) MERGED
RS通知master当前region已经合并完成
13)MERGING—NEW
当前region正在由两个region合并中
2、merge
当前region 进行merge有两种方式,一种是要停集群的,故不讨论,另一种在线操作的
1)命令
hbase shell中执行
merge_region ‘ENCODED_REGIONNAME’, ‘ENCODED_REGIONNAME’
这里有一个参数,true,强烈建议不要加,一般是相邻两个region合并的,原因是rowkey的连续性。加true就是强制的意思,一般强制了表就会出问题要修的
这个可以在WEB UI上看,就是NAME中的最后一串字符
示例如下:
merge_region ‘2b577fcd3ca0924b9b9160516708eb3d’,‘de3e0904e2e539a0c8a8946cdd796ccc’
2)流程
此项工作master和RS都参与的
client发送merge RPC到master上 -->master移动需要合并的region到负载更重的那台RS上–>master像RS发送merge的请求–>与split类似的流程,region的合并作为本地事务运行在RS上–>新生成一个region,并且状态标记为MERGING_NEW–>将要合并的两个region分别标记为MERGING,然后下线 --> 讲两个老的region的rowkey段添加到新的region上–>在hbase:meta表中删除旧的region添加,新的region–>open新的region,通知master
3)影响
合并期间,在做合并期间对应操作的region不能查询,但是不会数据搬迁,所以时不占带宽的
4)常见问题
1>问题
region长时间处于RIT状态
2>解决思路:
hbase hbck region_name 进行查看情况,具体参见hbase hbck进行修复