面试题答案
一键面试1. 小合并(Minor Compaction)触发情况及影响
- 触发情况:
- Region内Store文件数量触发:当Region内每个Store的HFile数量达到一定阈值(默认是3,可通过
hbase.hstore.compactionThreshold
配置)时,会触发Minor Compaction。HBase以Store为单位管理数据,每个Store对应一个列族,当一个列族下的HFile文件数量超过设定值,系统认为需要对这些小文件进行合并以优化存储结构。 - 时间间隔触发:如果距离上次Minor Compaction的时间超过了配置的
hbase.hstore.compaction.min
时间(默认1分钟),且Store的HFile数量达到hbase.hstore.compaction.min
配置的最小文件数(默认1),也会触发Minor Compaction。这种机制保证了即使HFile数量未达到数量阈值,但如果距离上次合并时间过长,也会进行一定程度的合并操作。
- Region内Store文件数量触发:当Region内每个Store的HFile数量达到一定阈值(默认是3,可通过
- 对数据存储和性能的影响:
- 数据存储:Minor Compaction将多个小的HFile合并成一个稍大的HFile,减少了文件数量,从而减少了文件系统的元数据开销,使得数据在物理存储上更加紧凑。但它不会删除已标记为删除的数据(墓碑标记数据),这些数据依然会存在于合并后的文件中,等待大合并时清理。
- 性能:Minor Compaction过程会占用一定的I/O资源,因为需要读取多个小HFile并写入一个新的HFile。但相对大合并而言,其I/O压力较小,对系统整体读写性能的影响相对轻微。在合并过程中,对读操作的影响不大,因为HBase可以并行读取多个HFile。而对写操作,可能会有一些短暂的延迟,因为需要竞争I/O资源。
2. 大合并(Major Compaction)触发情况及影响
- 触发情况:
- 手动触发:管理员可以通过HBase Shell命令
major_compact
对指定的表、Region或列族进行手动大合并操作。这种方式适用于需要即时清理过期数据或优化存储结构的场景,比如在执行了大量删除操作后,希望尽快释放空间。 - 时间周期触发:每个Region默认每24小时(可通过
hbase.hregion.majorcompaction
配置)会自动触发一次Major Compaction。此机制确保数据定期得到全面的整理和优化,避免因长时间积累的垃圾数据和碎片化存储影响系统性能。 - 表属性触发:如果表设置了
MAJOR_COMPACTION_PERIOD
属性,那么会按照该属性指定的时间周期触发Major Compaction,这为不同业务需求的表提供了定制化的大合并周期设置。
- 手动触发:管理员可以通过HBase Shell命令
- 对数据存储和性能的影响:
- 数据存储:Major Compaction会将一个Store下的所有HFile合并成一个HFile,同时会清理所有已标记为删除的数据(墓碑数据)以及过期的版本数据。这使得数据存储更加整洁,空间得到更有效的利用,减少了存储文件的碎片化程度,提升了数据的整体存储效率。
- 性能:Major Compaction是一个非常消耗资源的操作,会对系统性能产生较大影响。由于需要读取所有的HFile并写入一个新的HFile,会占用大量的I/O资源,导致磁盘I/O负载显著增加。同时,它还会消耗较多的内存用于缓存数据。在大合并期间,读操作可能会因为I/O资源竞争而出现延迟增加的情况,写操作也会受到严重影响,甚至可能导致短暂的写入阻塞,因为系统需要集中资源完成大合并操作。