StoreFile合并
1. StoreFile合并简介
由于Memstore每次刷写都会生成一个新的HFile,文件过多读取不方便,所以会进行文件的合并,清理掉过期和删除的数据,会进行StoreFile Compaction。合并分为两种,分别是Minor Compaction(小合并)和Major Compaction(大合并)。
- Minor Compaction会将临近的若干个较小的HFile合并成一个较大的HFile,并清理掉部分过期和删除的数据,有系统使用一组参数自动控制。
- Major Compaction会将一个Store下的所有的HFile合并成一个大HFile,并且会清理掉所有过期和删除的数据,由参数
hbase.hregion.majorcompaction
控制,默认7天。
下图为小大合并的流程:
2. Minor Compaction控制机制
参与到小合并的文件需要通过参数计算得到,有效的参数有5个:
(1)hbase.hstore.compaction.ratio
(默认 1.2F)合并文件选择算法中使用的比率。
(2)hbase.hstore.compaction.min
(默认 3)为Minor Compaction的最少文件个数。
(3)hbase.hstore.compaction.max
(默认 10)为Minor Compaction最大文件个数。
(4)hbase.hstore.compaction.min.size
(默认128M)为单个Hfile文件大小最小值,小于这 个数会被合并。
(5)hbase.hstore.compaction.max.size
(默认Long.MAX_VALUE)为单个Hfile文件大小最大值,高于这个数不会被合并。
3. Minor Compaction条件
小合并机制为拉取整个store中的所有文件,做成一个集合。之后按照从旧到新的顺序遍历。判断条件为:
① 过小合并,过大不合并(也就是说大合并的结果文件不会出现在小合并中)
② 文件大小/hbase.hstore.compaction.ratio
< (剩余文件大小和)则参与压缩。所有把比值设置过大,如10会最终合并为1个特别大的文件,相反设置为0.4,会最终产生4个storeFile。不建议修改默认值
③ 满足压缩条件的文件个数达不到个数要求(3 ≤ count ≤ 10)则不压缩。