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就會在 + 或 - 兩者乘積的時間範圍內隨機發生。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章