HBase之写流程中的刷写时机
目的
- 在执行刷写时,将部分过时的数据舍去,最多保留列族VERSIONS数量的put类型的cell.
- 在刷写时,会将memstore中的rowkey进行排序后,再刷写,方便在查询时,快速检索数据
手动刷写
flush "表名"
flush "region名"
刷写后磁盘上的HFile文件可以通过HBase提供的工具查看
habase org.apache.hadoop.hhase.io.hfile.HFile -e -p -f 文件路径
自动刷写
基于Memstore的刷写:
单个memstore的大小,超过flush.size
时, 当前memstore的所有region的所有列族都会刷写.
hbase.hregion.memstore.flush.size(默认128M)
单个memstore大小超过: flush.size * block.multiplier
时, 会阻塞客户端向此memstore的写入
hbase.hregion.memstore.flush.size(默认值128M)
* hbase.hregion.memstore.block.multiplier(默认值4)
基于Regionserver的刷写:
一个regionserver负责多个region,每个region又包含多个store对象,每个store对象都有一个memstore.
当一个regionserver负责的所有memstore总大小超过
java_heapsize
* hbase.regionserver.global.memstore.size(默认值0.4)
* hbase.regionserver.global.memstore.size.lower.limit(默认值0.95)
此时, regionserver会将负责的所有memstore按照大小排序, 从大到小依次刷写,直到总大小低于以上阈值.
如果regionserver所负责的所有的store对象的memstore总大小已经超过
java_heapsize
*hbase.regionserver.global.memstore.size(默认值0.4)
此时,会阻塞客户端向当前regionserver的所有region的写入.
基于时间的刷写:
默认每间隔base.regionserver.optionalcacheflushinterval(默认1小时)
,自动刷写
基于WAL处理文件的刷写:
如果正在使用的WAL文件的memstore数量超过32时,此时会根据WAL文件的生成时间,从早到晚依次刷写.