一、Flush
当MemStore中的数据量达到阈值,就将数据Flush到HDFS中,以Storefile形式存储。
- 触发条件:
-
当某个store中的memstore的存储达到 128M
hbase.hregion.memstore.flush.size
= 134217728 -
当整个region所使用的Memstore的内存大小达到阈值
hbase.regionserver.global.memstore.upperLimit
= 0.4
这个参数的作用是当单个HRegion内所有的Memstore大小总和超过指定值时,flush该HRegion的所有memstore。RegionServer的flush是通过将请求添加一个队列,模拟生产消费模式来异步处理的。那这里就有一个问题,当队列来不及消费,产生大量积压请求时,可能会导致内存陡增,最坏的情况是触发OOM。hbase.regionserver.global.memstore.lowerLimit
= 0.38
当MemStore使用内存总量达到hbase.regionserver.global.memstore.lowerLimit指定值时,将会有多个MemStores flush到文件中,MemStore flush 顺序是按照大小降序执行的,直到刷新到MemStore使用内存略小于lowerLimit