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