前言:图片是HBase架构图,建议结合架构图,理解StoreFile 的合并
概述
HBase 根据合并规模将 Compaction 分为了两类:MinorCompaction 和 MajorCompaction。
Minor Compaction:会将临近的若干个较小的 HFile 合并成一个较大的 HFile,但 不会清理过期和删除的数据。
Major Compaction:会将一个 Store 下的所有的 HFile 合并成一个大 HFile,并且 会清理掉过期和删除的数据。
另外,一般情况下,Major Compaction时间会持续比较长,整个过程会消耗大量系统资源,对上层业务有比较大的影响。因此线上业务都会将关闭自动触发Major Compaction功能,改为手动在业务低峰期触发。默认Major Compaction的合并周期是7天
一、合并storefile的原因
由于memstore每次刷写都会生成一个新的HFile,且同一个字段的不同版本(timestamp)和不同类型(Put/Delete)有可能会分布在不同的HFile中,因此查询时需要遍历所有的HFile。为了减少 HFile 的个数,以及清理掉过期和删除的数据,会进行 StoreFile Compaction。
Hadoop不擅长处理小文件,文件越大性能越好。
二、什么时候合并
1、一个列簇中storefile大于等于3个的时候就会自动合并(Major Compaction)
2、7天的时候会自动合并
但是在生产中,建议把自动合并关掉。因为Major Compaction时间会持续比较长,整个过程会消耗大量系统资源,对上层业务有比较大的影响
3、HBase shell 手动合并某个文件
compact '表名'
网友评论