HBase的flush和compact
Flush和compact概念
- flush可以简单的理解为将数据从内存落地到磁盘
- 每次flush的过程中的prepare阶段都会有短时间的加锁阻塞,这个过程很短不影响读写
- 从region级别的flush触发条件开始,一旦触发,就会flush所有memstore,这是不建议由很多列族的一个重要原因
- 在达到阻塞条件前(默认是JVM内存大小*0.4),可以一边向memstore写数据,一边flush
- compact可以简单的理解为HFile文件的合并,目的是为了防止小文件过多导致查询效率下降。
Flush触发条件
从容器的大小来看,从小到大可以分为以下3个级别
memstore级别限制
- 当region中的任意一个
Memstore
达到了上限(hbase.hregion.memstore.flush.size,默认128MB),就会触发memstore
刷新 - 可以通过更改配置文件来更改默认大小
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value>
</property>
region级别限制
- 当Region中所有
Memstore
的大小总和达到了上限(hbase.hregion.memstore.block.multiplier * hbase.hregion.memstore.flush.size,默认 2* 128M = 256M),会触发memstore
刷新 - 可以通过更改配置文件来更改默认大小
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value>
</property>
<property>
<name>hbase.hregion