關於MemStore的刷新方式

關於MemStore的刷新方式: shell

一、MemStore達到上限hbase.hregion.memstore.flush.size 默認是128M的時候,會觸發MemStore的刷新。這個參數表示單個MemStore的大小的閾值。這個時候是不阻塞寫操做的。 spa

 

2、當一個RegionMemStore總量達到hbase.hregion.memstore.block.multiplier * hbase.hregion.memstore.flush.size(默認2*128M=256M)時,會阻塞這個region的寫操做,並強制刷寫到HFile。觸發這個刷新只會發生在MemStore即將寫滿128Mput了一個巨大的記錄的狀況,這時會阻塞寫操做,強制刷新成功才能繼續寫入。 server

 

3、一個RegionServer會有不少個Region,不少的MemStore,因此可能單個Region並無超過閾值,可是整個RegionServer的內存已經佔用很是多了,這時候還有另外兩個參數控制內存的刷寫:hbase.regionserver.global.memstore.upperLimit 默認0.4,當RegionServer上所有的MemStore佔用超過heap(heap的大小在hbase-env.sh中設置HBASE_HEAPSIZE,默認1G,咱們設置的4G)40%時,強制阻塞全部的寫操做,將全部的MemStore刷寫到HFilehbase.regionserver.global.memstore.lowerLimit 默認0.35,表示全部的MemStore佔用超過heap35%時,會選擇一些佔用內存比較大的MemStore阻塞寫操做並進行flush,這是爲了下降阻塞所有寫操做flush帶來的問題。 ip

 

4、當HLog達到最大值(hbase.regionserver.maxlogs * hbase.regionserver.hlog.blocksize 默認32*64M = 2G)時,也會觸發MemStore的刷新,強制將更新固化到HFile中,避免在RegionServer crash時恢復時間過長。 內存

 

5、按期會進行MemStore的刷新,hbase.regionserver.optionalcacheflushinterval 默認3600000,一小時,確保MemStore的數據不會長時間沒有固化到HFile中。爲避免全部的MemStore在同一時間都進行flush致使的問題,按期的flush操做有20000左右的隨機延時。 it

 

6、手工能夠進行flush操做,在hbase shell調用flush,能夠針對某個表或者某個region進行flush io

hbase(main):010:0> help 'flush' table

Flush all regions in passed table or pass a region row to sed

flush an individual region.  For example: im

 

  hbase> flush 'TABLENAME'

  hbase> flush 'REGIONNAME'

相關文章
相關標籤/搜索