您好,登錄后才能下訂單哦!
這篇文章主要介紹“MemStore的刷新方式是什么”,在日常操作中,相信很多人在MemStore的刷新方式是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MemStore的刷新方式是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
關于MemStore的刷新方式:
1、MemStore達到上限hbase.hregion.memstore.flush.size 默認是128M的時候,會觸發MemStore的刷新。這個參數表示單個MemStore的大小的閾值。這個時候是不阻塞寫操作的。
2、當一個Region的MemStore總量達到hbase.hregion.memstore.block.multiplier * hbase.hregion.memstore.flush.size(默認2*128M=256M)時,會阻塞這個region的寫操作,并強制刷寫到HFile。觸發這個刷新只會發生在MemStore即將寫滿128M時put了一個巨大的記錄的情況,這時會阻塞寫操作,強制刷新成功才能繼續寫入。
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刷寫到HFile;hbase.regionserver.global.memstore.lowerLimit 默認0.35,表示所有的MemStore占用超過heap的35%時,會選擇一些占用內存比較大的MemStore阻塞寫操作并進行flush,這是為了降低阻塞全部寫操作flush帶來的問題。
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左右的隨機延時。
6、手工可以進行flush操作,在hbase shell調用flush,可以針對某個表或者某個region進行flush:
hbase(main):010:0> help 'flush'
Flush all regions in passed table or pass a region row to
flush an individual region. For example:
hbase> flush 'TABLENAME'
hbase> flush 'REGIONNAME'
到此,關于“MemStore的刷新方式是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。