1 Flush机制
-
(1)当memstore的大小超过这个值的时候,会flush到磁盘,默认为128M
<property> <name>hbase.hregion.memstore.flush.size</name> <value>134217728</value> </property>
-
(2)当memstore中的数据时间超过1小时,会flush到磁盘
<property> <name>hbase.regionserver.optionalcacheflushinterval</name> <value>3600000</value> </property>
-
(3)HregionServer的全局memstore的大小,超过该大小会触发flush到磁盘的操作,默认是堆大小的40%
<property> <name>hbase.regionserver.global.memstore.size</name> <value>0.4</value> </property>
-
(4)手动flush
flush tableName
2: Compact合并机制
-
hbase为了防止小文件过多,以保证查询效率,hbase需要在必要的时候将这些小的store file合并成相对较大的store file,这个过程就称之为compaction。
-
在hbase中主要存在两种类型的compaction合并
-
minor compaction 小合并
-
在将Store中多个HFile合并为一个HFile
这个过程中,达到TTL(记录保留时间)会被移除,删除和更新的数据仅仅只是做了标记,并没有物理移除,这种合并的触发频率很高。```
-
minor compaction触发条件由一下几个参数共同决定:
<!--表示至少需要三个满足条件的store file时,minor compaction才会启动--> <property> <name>hbase.hstore.compaction.min</name> <value>3</value> </property> <!--表示一次minor compaction中最多选取10个store file--> <property> <name>hbase.hstore.compaction.max</name> <value>10</value> </property> <!--默认值为128m, 表示文件大小小于该值的store file 一定会加入到minor compaction的store file中 --> <property> <name>hbase.hstore.compaction.min.size</name> <value>134217728</value> </property> <!--默认值为LONG.MAX_VALUE, 表示文件大小大于该值的store file 一定会被minor compaction排除--> <property> <name>hbase.hstore.compaction.max.size</name> <value>9223372036854775807</value> </property>
-
-
major compaction 大合并
-
合并Store中所有的HFile为一个HFile
这个过程有删除标记的数据会被真正移除,同时超过单元格maxVersion的版本记录也会被删除。 合并频率比较低,默认7天执行一次,并且性能消耗非常大,建议生产关闭(设置为0),在应用空闲时间手动触发。 一般可以是手动控制进行合并,防止出现在业务高峰期。
- major compaction触发时间条件
<!--默认值为7天进行一次大合并,--> <property> <name>hbase.hregion.majorcompaction</name> <value>604800000</value> </property>
- 手动触发
##使用major_compact命令 major_compact tableName
-
-