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 对应的文件就能删除