RegionServer启动的时候初始化 CompactSplitThread
split 初始化。 ps:splitThreads 默认为1
this.splits = (ThreadPoolExecutor)
Executors.newFixedThreadPool(splitThreads,
new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
t.setName(n + "-splits-" + System.currentTimeMillis());
return t;
}
});
split 触发
1、 flushRegion的时候、检查是否需要split
2、执行完 compact 的时候
split 触发级别
api 手动 和 系统触发自动
出发后执行过程
1、 判断maxRegion 是否已经超过在线的 Region数量,是则退回
2、判断改region下的所有store中的最小优先级, 优先级的算法为 hbase.hstore.blockingStoreFiles - 目前Region 中 storeFile ,如果大于等于1 则执行(也就是说目前HFile的数量还没达到阻塞阀值