1、当一个Region中的某个MemStore的大小达到128M(hbase.heregion.memstore.flush.size的默认值),那么整个Region中的所有MemStore都会flush
2、当一个Region中的所有MemStore的大小达到128 * 4 (4为hbase.hregion.memstore.block.multiplier的默认值)时,整个Region中的所有MemStore都会flush
3、当RegionServer中所有MemStore的总大小达到 10G * 40% * 95%时(其中10G为虚拟机内存大小,即java_heapsize,hbase.regionserver.global.memstore.size的默认值为0.4,hbase.regionserver.global.memstore.size.lower.limit的默认值为95%),在flush的时候,会根据每个MemStore占用的空间进行排序,优先flush占用空间多的MemStore。注意:当写入的并发操作比较多的时候,以上触发操作会延迟,MemStore总大小达到 10G * 40%时,强制flush,总大小小于10G * 40% * 95% 时停止flush,所以尽量把这个参数调小一点(75%-85%),避免释放的内存太小,频繁flush
4、当HLog文件数量达到32个(hbase.regionserver.maxlogs默认值为32)的时候会flush
5、Region距上一次flush超过一小时会自动flush(定期刷写,hbase.regionserver.optionalcacheflushinterval默认为1小时)
6、手动刷写,flush命令:flush table,flush regionname