面试题答案
一键面试手动触发
通过HBase Shell命令 major_compact
实现。对指定表执行该命令后,HBase会立即启动对该表所有Region的Major Compaction。其原理是强制将一个Region中的所有StoreFile合并成一个大的StoreFile,此过程会删除过期数据和标记为删除的数据,从而优化数据存储结构,提升查询性能。
自动触发
- Minor Compaction
- 触发条件:当一个Store中的StoreFile数量达到
hbase.hstore.compactionThreshold
(默认值为3)时,会触发Minor Compaction。另外,当某个StoreFile的大小小于hbase.hstore.compaction.min.size
(默认值为134217728,即128MB),且Store中StoreFile数量大于等于hbase.hstore.compaction.min
(默认值为2)时,也可能触发。 - 原理:Minor Compaction会挑选Store中较小的一些StoreFile进行合并,生成一个新的StoreFile。此过程不会删除过期数据和标记为删除的数据,主要目的是减少StoreFile的数量,提升读性能,因为读操作时需要遍历的文件数减少。
- 触发条件:当一个Store中的StoreFile数量达到
- Major Compaction
- 触发条件:
- 时间周期触发:默认情况下,每个Region的Major Compaction每7天(可通过
hbase.regionserver.optionalcacheflushinterval
配置,单位为毫秒)执行一次。 - 当StoreFile的数量达到
hbase.hstore.majorcompaction.threshold
(默认值为Integer.MAX_VALUE,即几乎不限制,实际很少依赖此值触发)。
- 时间周期触发:默认情况下,每个Region的Major Compaction每7天(可通过
- 原理:Major Compaction会将一个Region中的所有StoreFile合并成一个大的StoreFile,同时清理过期数据和标记为删除的数据,重新构建Bloom Filter等索引结构,从而优化存储和提升查询效率。
- 触发条件: