Hbase之MemStore的Flush

一般的这种Flush都是在时间和数据大小的维度去Flush的。

结合图便于理解

Hbase之MemStore的Flush_第1张图片

  1. RegionServer级别的参数
      
        hbase.regionserver.global.memstore.size  
          
        Maximum size of all memstores in a region server before  
            new  
            updates are blocked and flushes are forced. Defaults to 40% of heap (0.4).  
            Updates are blocked and flushes are forced until size of all  
            memstores  
            in a region server hits  
            hbase.regionserver.global.memstore.size.lower.limit.  
            The default value in this configuration has been intentionally left  
            emtpy in order to  
            honor the old hbase.regionserver.global.memstore.upperLimit property if  
            present.  
          
    

这个参数的意思是,RegionServer的全局Memstore的大小(RegionServer中所有Region中MemStore大小),超过该大小会触发flush到磁盘的操作,默认是堆大小的40%。

此时的Flush会阻塞客户端读写

  
        hbase.regionserver.global.memstore.size.lower.limit  
          
        Maximum size of all memstores in a region server before  
            flushes are forced.  
            Defaults to 95% of hbase.regionserver.global.memstore.size (0.95).  
            A 100% value for this value causes the minimum possible flushing to  
            occur when updates are  
            blocked due to memstore limiting.  
            The default value in this configuration has been intentionally left  
            emtpy in order to  
            honor the old hbase.regionserver.global.memstore.lowerLimit property if  
            present.  
          
    

公式:堆 * hbase.regionserver.global.memstore.size(第一个参数)* 0.95

上面那个参数为0.4

RegionServer中所有MemStore达到堆大小 * 0.4 * 0.95时,开始进行全局所有的MemStore的Flush。在Flush的时候会给多个memStore进行排序,优先将MemStore大的Flush出去。

但是有时候写负载很高时,Flush的速度比客户端写入的速度小。当size达到第一个参数 堆大小 * 0.4的时候,会阻塞客户端写,一直阻塞到整个regionserver级别的memstore的大小为 堆大小 * 0.4 *0.95为止。

      
        hbase.regionserver.optionalcacheflushinterval  
        3600000  
          
            Maximum amount of time an edit lives in memory before being automatically  
            flushed.  
            Default 1 hour. Set it to 0 to disable automatic flushing.  
          
     

此参数的意思是当最后一条数据进入内存达到1小时,会进行Flush。可以理解为当前内存最后一次操作时间一小时后开始flush

默认为1h,设置为0时不启用此参数。

 

hbase.regionserver.max.logs 在WAL上限制。

当 WAL 文件的数量超过 hbase.regionserver.max.logs,region 会按照时间顺序依次进行刷写,直到 WAL 文件数量减小到 hbase.regionserver.max.log 以下(该属性名已经废弃,现无需手动设置,最大值为 32)。此属性不暴露给用户,默认为32。

32指的是文件的个数。hbase.regionserver.hlog.blocksize  此值默认为hdfs的block块大小(128M)

也就是说 hbase.regionserver.max.logs = 32 * 128时,会进行Flush

   2. Region级别的参数

      
        hbase.hregion.memstore.flush.size  
        134217728  
          
            Memstore will be flushed to disk if size of the memstore  
            exceeds this number of bytes. Value is checked by a thread that runs  
            every hbase.server.thread.wakefrequency.  
          
      

当某个 memstroe 的大小达到了 hbase.hregion.memstore.flush.size(默认值 128M),其所在 region 的所有 memstore 都会刷写。

 

 

你可能感兴趣的:(大数据-Hbase,大数据,hbase,hadoop)