hbase為了防止小檔案(被刷到磁碟的menstore)過多,以保證保證查詢效率,hbase需要在必要的時候將這些小的store file合并成相對較大的store file,這個過程就稱之為compaction。在hbase中,主要存在兩種類型的compaction:minor compaction和major compaction。
major compaction 的功能是將所有的store file合并成一個,觸發major compaction的可能條件有:major_compact 命令、majorCompact() API、region server自動運行(相關參數:hbase.hregion.majoucompaction 預設為24 小時、hbase.hregion.majorcompaction.jetter 預設值為0.2 防止region server 在同一時間進行major compaction)。hbase.hregion.majorcompaction.jetter參數的作用是:對參數hbase.hregion.majoucompaction
規定的值起到浮動的作用,假如兩個參數都為預設值24和0,2,那麼major compact最終使用的數值為:19.2~28.8 這個範圍。
minor compaction的運行機制要複雜一些,它由一下幾個參數共同決定:
hbase.hstore.compaction.min :預設值為 3,表示至少需要三個滿足條件的store file時,minor compaction才會啟動
hbase.hstore.compaction.max 預設值為10,表示一次minor compaction中最多選取10個store file
hbase.hstore.compaction.min.size 表示檔案大小小於該值的store file 一定會加入到minor compaction的store file中
hbase.hstore.compaction.max.size 表示檔案大小大於該值的store file 一定會被minor compaction排除
hbase.hstore.compaction.ratio 將store file 按照檔案年齡排序(older to younger),minor compaction總是從older store file開始選擇,如果該檔案的size 小於它後面hbase.hstore.compaction.max 個store file size 之和乘以 該ratio,則該store file 也將加入到minor compaction 中。
如果對minor compaction過程還是不瞭解,可以去看hbase中關於minor compaction 的源碼,或者:http://blog.csdn.net/macyang/article/details/6423078