HBase Split分析
HBase split概述
HBasesplit是HBase根据一定的触发条件和一定的分裂策略将HBase的一个region进行分裂成两个子region并对父region进行清除处理的过程。Region是HBase中一个非常核心的组织单元,所有的region组成了整个HBase集群,如下面的HBase的体系结构所示:
(图一)
因此在HBase的整体region分裂过程中达到一生二,二生三,三生万物的效果。
HBase为啥要split
在HBase中,split其实是进行sharding的一种技术手段,通过HBase的split条件和split策略,将region进行合理的split,再通过HBase的balance策略,将分裂的region负载均衡到各个regionserver上,最大化的发挥分布式系统的优点。HBase这种自动的sharding技术比传统的数据库sharding要省事的多,减轻了维护的成本,但是这样也会给HBase带来额外的IO开销,因此在很多系统中如果能很好的预计rowkey的分布和数据增长情况,可以通过预先分区,事先将region分配好,再将HBase的自动分区禁掉。
触发条件:
HBase中共有3种情况会触发HBase的split,分别是:
1.当memstore flush操作后,HRegion写入新的HFile,有可能产生较大的HFile,HBase就会调用CompactSplitThread.requestSplit判断是否需要split操作。
2.HStore刚刚进行完compact操作后有可能产生较大的HFile,当满足HBase的某一分裂策略后就会进行split操作。