HBase單個RegionServer的region數目上限,hbaseregionserver
前言
RegionServer維護Master分配給它的region,處理對這些region的IO請求,負責切分在運行過程中變得過大的region, 由於叢集效能( 分配的記憶體和磁碟是有限的 )有限的,那麼HBase單個RegionServer的region數目肯定是有上限的。
Region數目上限
RegionServer的region數目取決於memstore的記憶體使用量,每個region擁有一組memstore(memstore的數量有hstore決定,hstore的資料由建立表時的指定的列族個數決定,所以 每個region的memstore的個數 = 表的列族的個數 ),可以通過配置來修改memstore佔用記憶體的大小,一般設定在 128 M – 256M之間。
RegionServer 分配一定比例的記憶體給它下面的所有memstore( 該比例大小 可通過hbase.regionserver.global.memstore.upperLimit 進行修改 ), 如果記憶體溢出(使用了太多的memstore),它可能會導致嚴重的後果,如伺服器反應遲鈍 或compact風暴。比較好的計算每RS(假設一個表)region的數量的公式為:
((RS memory) * (total memstore fraction)) / ((memstore size)*(# column families))
例如: 如果 一個RegionServer配置的記憶體是16g,使用預設配置( hbase預設regionserver分給memstore的比例是0.4 , 預設的menstore的佔用128M記憶體 ), 一個CF,那麼這個regionServer下的region的個數大約為 16384 * 0.4 / (128*1) = 51個,實際測試大於這個數 一兩倍 也沒太大的問題。 一個HBase表包含一至多個region,那麼表的數目上限也是可以估算出來的。
Region大小上限
對於生產情境中大表,最大的region大小主要是受compactions 的限制,大量大HFile的compact會降低群集效能。目前,該建議的最大region大小為10-20GB,而5-10GB是最優