Compact的触发

 

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设置的间隔时间要乘以这个值之后在进行判断

ret=hbase.hregion.majorcompaction
if(hbase.hregion.majorcompaction.jitter>0){
    jitter=(hbase.hregion.majorcompaction*hbase.hregion.majorcompaction.jitter)
    rnd =Random生成一个随机数
        返回值:ret+ 2L * jitter * rnd ;相当于  hbase.hregion.majorcompaction + 2*(hbase.hregion.majorcompaction*hbase.hregion.majorcompaction.jitter)*随机数
}

 

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就会在 + 或 - 两者乘积的时间范围内随机发生。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值