关于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'

相关文章
相关标签/搜索