region數量的影響:
通常較少的region可使集群運行的更加平穩,官方指出,每個regionServer大約100個regions的時候效果最佳,理由如下:
1)hbase的一個特性MSLAB,它有助於防止堆內存的碎片化,減輕垃圾回收full gc的問題,默認是開啟的。但是每個MenStore需要2MB,如果region過多,就算不儲存數據,也會占用很多內存。
2)如果region過多,MenStore也過多,就會觸發regionServer的限制,導致flush,就會對用戶請求產生較大的影響,可能阻塞該regionServer上的更新操作。
3)HMaster需要花費大量的時間來分配和移動Region,且過多的region會增加zookeeper的負擔。
4)hbase讀入數據進行處理的mapreduce程序,過多的region會產生很多的map任務數量,默認情況下有設計的region數量決定。
region大小的影響:
hbase中的數據一開始會寫入MenStore,超過配置之后,會flush到磁盤成為HStore文件,當HStore的數量超過配置之后,會啟動compaction,將他們合並為一個HStore。當合並后的HStore大於max.filesize時,會觸發分隔動作,將它切分為兩個region。hbase.hregion.max.filesize不宜過大或過小,經過實戰,生產高並發運行下,最佳大小5-10GB!關閉某些重要場景的hbase表的major_compact!在非高峰期的時候再去調用major_compact,這樣可以減少split的同時,顯著提供集群的性能,吞吐量、非常有用。
1)當hbase.hregion.max.filesize比較小時,觸發split的機率更大,系統的整體訪問服務會出現不穩定現象。
2當hbase.hregion.max.filesize比較大時,由於長期得不到split,因此同一個region內發生多次compaction的機會增加了。這樣會降低系統的性能、穩定性,因此平均吞吐量會受到一些影響而下降。
