面试题答案
一键面试Minor Compaction触发条件
- 文件数量触发:当Region中的Store下的HFile数量达到一定阈值时,会触发Minor Compaction。该阈值可通过配置参数
hbase.hstore.compaction.min
进行设置,默认值为3。也就是说,当一个Store中的HFile数量大于等于3时,就有可能触发Minor Compaction。其目的是将较小的HFile合并成一个较大的HFile,以减少文件数量,提高读性能。 - 文件大小触发:除了文件数量,单个HFile的大小也可能触发Minor Compaction。当一个HFile的大小超过了
hbase.hstore.compaction.min.size
配置的阈值(默认值为134217728,即128MB)时,即使HFile数量未达到hbase.hstore.compaction.min
的设定值,也可能触发Minor Compaction。这有助于控制HFile的大小,避免单个文件过大对读写性能产生影响。 - 时间间隔触发:可以通过配置
hbase.hstore.compaction.period
参数(默认值为1800秒,即30分钟)来设置一个时间间隔。在这个时间间隔内,如果没有其他触发条件导致Minor Compaction发生,那么每隔hbase.hstore.compaction.period
时间,就会检查是否满足其他触发条件,如果满足则触发Minor Compaction。
Major Compaction触发条件
- 手动触发:管理员可以通过HBase的命令行工具(如
hbase shell
)手动执行Major Compaction操作。例如,使用major_compact 'table_name'
或major_compact 'table_name', 'region_name'
命令,可以对指定的表或表中的特定Region执行Major Compaction。这种方式通常用于在系统负载较低时,主动对数据进行整理,以提高数据的一致性和存储效率。 - 时间周期触发:HBase默认会在每个Region上每隔7天(可通过
hbase.hregion.majorcompaction
参数配置,单位为毫秒,默认值为604800000)执行一次Major Compaction。这个时间周期的设定旨在确保数据定期进行全面的合并和整理,以清理过期数据(如已删除的记录),并将所有HFile合并成一个,从而提高读性能和数据的一致性。 - 表属性触发:通过设置表的属性,可以调整Major Compaction的触发行为。例如,可以通过
hbase shell
中的alter
命令设置表的MAJOR_COMPACTION_PERIOD
属性,来改变Major Compaction的执行周期。此外,还可以通过设置DISABLE_MAJOR_COMPACTION
属性为true
来禁用自动触发的Major Compaction,不过这需要谨慎操作,因为长期不进行Major Compaction可能会导致数据不一致和性能下降等问题。