Compaction的主要目的: 1.將多個HFile 合併為較大HFile,從而提高查詢性能 2.減少HFile 數量,減少小文件對HDFS 影響 3.提高Region初始化速度。
hbase.hstore.compaction.min
當某個列族下的HFile 文件數量超過這個值,則會觸發 minor compaction操作 默認是3,比較小,建議設置10-15 這個值影響是: 設置過小會導致合併文件太頻繁,特別是頻繁bulkload 或者數據量比較大的情況下 設置過大又會導致一個列族下面的HFile 數量比較多,影響查詢效率
進階: 這個值的設置還和業務數據的特點有關係,比如類似詳單雲系統,業務邏輯是 按月建表,每個月建一個表,rowkey是reverse(手機號碼)+時間戳 數據每3-5分鐘導入一次。查詢邏輯是根據手機號碼+時間段查詢 通常手機流量使用情況會某個號碼會不斷的產生,所以一個手機號碼產生的數據基本上會按照分布在很多HFile中。 如果hbase.hstore.compaction.min 設置過大的話,則一個查詢時候會訪問較多的 HFile 影響查詢效率。 這種業務就不適合設置的特別大。
相反如果是類似只查詢某段時間的日誌業務,查詢的數據都比較集中,也就是查詢只會發生在一個HFile或者相鄰的2個HFile 中。 此時合併文件,對查詢效率的提升影響不大。則可以將該值設置的大一些,減少合併對系統的影響。
hbase.hstore.compaction.max
一次最多可以合併多少個HFile,默認為 10 限制某個列族下面選擇最多可選擇多少個文件來進行合併 注意需要滿足條件hbase.hstore.compaction.max > hbase.hstore.compaction.min
hbase.hstore.compaction.max.size
默認Long最大值,minor_compact 時 HFile 大小超過這個值則不會被選中合併 用來限制防止過大的HFile被選中合併,減少寫放大以及提高合併速度
hbase.hstore.compaction.min.size
默認 memstore 大小,minor_compact 時 HFile 小於這個值,則一定會被選中 可用來優化儘量多的選擇合併小的文件
hbase.regionserver.thread.compaction.small 默認1,每個RS的 minor compaction線程數,其實不是很準確,這個線程主要是看參與合併的HFile數據量 有可能minor compaction數據量較大會使用compaction.large 提高線程可提高HFile 合併效率
hbase.regionserver.thread.compaction.large 默認1,每個RS的 major compaction線程數,其實不是很準確,這個線程主要是看參與合併的HFile數據量 有可能minor compaction數據量較大會使用compaction.large 提高線程可提高 HFile 合併效率
hbase.hregion.majorcompaction
默認:86400000
關閉hbase major compaction,業務低谷手動執行
推薦 4 個 Apache 頂級項目的官方公眾號,希望對大家了解開源大數據生態,擴展技術視野有所幫助。
由 Apache Flink Community China 運營管理,旨在聯合國內的 Flink 大 V,向國內宣傳和普及 Flink 相關的技術。公眾號將持續輸出 Flink 最新社區動態,入門教程、Meetup 資訊、應用案例以及源碼解析等內容,希望聯合社區同學一起推動國內大數據技術發展。
研究探討 Apache HBase 內核原理,源碼剖析,周邊生態以及實踐應用,匯集眾多Apache HBase PMC & Committer以及愛好使用者,提供一線Apache HBase企業實戰以及Flink集成等資訊。