1、ConstantSizeRegionSplitPolicy

一个Region中最大Store的大小超过阈值之后就会触发决裂。该策略最简略,但弊病相当大。阈值设置大,对大表敌对,小表可能不会触发决裂,极其状况下可能只有一个region。阈值设置小,对小表敌对,但一个大表可能在集群中产生大量的region。对于集群治理不是坏事。

2、IncreasiongToUpperBoundRegionSplitPolicy

一个Region中最大Store的大小超过阈值之后就会触发决裂。阈值不是固定的值,而是在肯定状况下一直调整的,调整后的阈值大小和Region所属表在以后region server上的region个数有关系。
调整后的阈值 = regions regions flushsize * 2
阈值不会有限增大,maxRegionFileSize来做限度。可能自适应大小表,集群规模大的状况下,对大表很优良,对小表会产生大量小region

3、SteppingSplitPolicy
决裂阈值大小和待决裂Region所属表在以后Region Server上的region个数有关系。
如果region个数为1,决裂之为flushsize * 2。
否则为 maxRegionFileSize
大表小表都不会产生大量的region

Region决裂筹备

1、初始化两个子Region对象
2、更改zk的状态为splitting、更改master内存中父region的状态信息
3、在父目录下新建.split文件夹
4、敞开父region,flush操作,数据落盘。短时间落在父region上的申请都会抛异样
5、在.split文件夹下生成两个子文件夹daughterA、daughterB,并在两个文件夹内生成reference文件,别离指向父region中对应的文件

reference是援用文件,文件中的内容并不是用户数据。由两局部形成,决裂点、boolean变量,true示意reference援用的是父文件的上局部,false示意下半局部

6、决裂成两个region后,将daughterA、daughterB拷贝到HBase根目录
7、下线父region,批改meta表,

依据reference文件查找数据

1、依据文件名定位到具体文件(父region名+hfile名)
2、依据reference文件内容的两个变量确定要扫描的局部数据

父region数据迁徙到子region

Major Compaction

父region被删除的工夫

master启动线程定期遍历查看所有处于splitting状态的父region
1、读取出meta表中所有split为true的region,加载出他们的子region
2、查看子region是否还存在援用文件,若不存在,父region对应的文件就能删除