HBase之写流程中的刷写时机

目的

  1. 在执行刷写时,将部分过时的数据舍去,最多保留列族VERSIONS数量的put类型的cell.
  2. 在刷写时,会将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文件的生成时间,从早到晚依次刷写.

原文地址:https://www.cnblogs.com/bitbitbyte/p/13247766.html