Compact(包含Minor Compact和Major Compact)触发方式
1.memstore flush之后触发
触发条件:flush block时间超过hbase.hstore.blockingWaitTime(默认90s)
2.后台线程CompactionChecker定期触发
CompactionChecker定期检查是或否需要做Compact,
周期为:hbase.server.thread.wakefrequency 默认值:10s
CompactionChecker逻辑:
- 会记录执行了多少次定时检查iteration,检查的时候会遍历当前RegionServer的所有online的region,每个region会检查下面的Store
- (multiplier=hbase.server.compactchecker.interval.multiplier 默认值:1000)
- iteration%multiplier==0才继续判断是否要执行minor还是major的判断
执行minor还是major:
- 先判断当前文件数是否超过了设置的最小文件数(hbase.hstore.compactionThreshold)超过则执行minor Compact
- 未超过会判断是否需要执行Major Compact
这里主要考虑的是一段时间内没有写入请求仍然需要做compact检查
3.客户端通过shell或者API触发
上面No.1操作触发Major Compact概率较小,如果已经到1中的条件说明flush都已经被block了(正常情况下flush不应该被block)
上面No.2操作会触发Compaction,但是是否真正执行Major Compact还要看下面的参数
Major Compaction判断条件
上面1,2执行之后还要看下面两个参数,是否符合条件
下面两个参数在一个公式中一起出现的,要一起看
1.hbase.hregion.majorcompaction.jitter
默认值:0.5
说明:
getNextMajorCompactTime方法,为了在避免Compaction在重启的时候在各个机器上同时拉起,而设置的一个浮动值,参数2设置的间隔时间要乘以这个值之后在进行判断
|
2.hbase.hregion.majorcompaction
单位:毫秒
默认值:1000*60*60*24*7 (7天)
说明:Major Compaction的默认间隔周期。当发起Compaction的时候,会判断距离上一次Major Compactiong的时间,间隔时间超过此处参数才执行Major Compaction;
设置为0:表示禁止自动的Major Compaction ;只能手动触发;
2.hbase.hregion.majorcompaction.jitter
Major compaction抖动参数,默认值0.5。这个参数是为了避免major compaction同时在各个regionserver上同时发生,避免此操作给集群带来很大压力。 这样节点major compaction就会在 + 或 - 两者乘积的时间范围内随机发生。