HBase在split和major compact的一些非通常情況下的觸發條件
原
HBase在split和major compact的一些非通常情況下的觸發條件
2013年03月10日 17:51:25 楊步濤的部落格 閱讀數:9914更多
所屬專欄: HBase儲存
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/yangbutao/article/details/8627120
HBase中的major compact功能中,引數hbase.hregion.majorcompaction已經設為0了,
日誌中發現還是會major compact。
有3種方式,可以激發major compact
1) 通過hbase shell命令 major_compact進行觸發
2) compact when file <= sum(smaller_files) *
'hbase.hstore.compaction.ratio'
這種情況是選中的檔案數量等於store中的檔案數量時,會有minor compact升級為major compact
3) major compact時間間隔到期: after (now - min(StoreFile.timestamp)) >
"hbase.hregion.majorcompaction" + rand() *
hbase.hregion.majorcompaction.jitter"
至於split,並不是設定了hbase.hregion.max.filesize(預設10G)為很大就保證不split了,需要有以下的演算法,參見
IncreasingToUpperBoundRegionSplitPolicy是0.94.0預設region split策略
這裡的split有一個判斷條件,先計算這tableRegionsCount(regionserver上的這個table的online的region個數),
然後迴圈計算此region的所有store是否太大,這是通過getSizeToCheck方法計算出一個size,若當前的store總大小大於這個值,則表示此region需要split.
getSizeToCheck的計算方法首先判斷tableRegionsCount是否等於0,若是則返回hbase.hregion.max.filesize ,若不是,則計算Math.min(getDesiredMaxFileSize(),
this.flushSize * (tableRegionsCount * tableRegionsCount)。