前言:圖片是HBase架構圖,建議結合架構圖,理解StoreFile 的合併
概述
HBase 根據合併規模將 Compaction 分爲了兩類:MinorCompaction 和 MajorCompaction。
Minor Compaction:會將臨近的若干個較小的 HFile 合併成一個較大的 HFile,但 不會清理過期和刪除的數據。
Major Compaction:會將一個 Store 下的所有的 HFile 合併成一個大 HFile,並且 會清理掉過期和刪除的數據。
另外,一般情況下,Major Compaction時間會持續比較長,整個過程會消耗大量系統資源,對上層業務有比較大的影響。因此線上業務都會將關閉自動觸發Major Compaction功能,改爲手動在業務低峯期觸發。默認Major Compaction的合併週期是7天
一、合併storefile的原因
由於memstore每次刷寫都會生成一個新的HFile,且同一個字段的不同版本(timestamp)和不同類型(Put/Delete)有可能會分佈在不同的HFile中,因此查詢時需要遍歷所有的HFile。爲了減少 HFile 的個數,以及清理掉過期和刪除的數據,會進行 StoreFile Compaction。
Hadoop不擅長處理小文件,文件越大性能越好。
二、什麼時候合併
1、一個列簇中storefile大於等於3個的時候就會自動合併(Major Compaction)
2、7天的時候會自動合併
但是在生產中,建議把自動合併關掉。因爲Major Compaction時間會持續比較長,整個過程會消耗大量系統資源,對上層業務有比較大的影響
3、HBase shell 手動合併某個文件
compact '表名'