面试题答案
一键面试Minor Compaction
- 触发条件:
- 当MemStore刷写生成的HFile达到一定数量(默认为3个)时,通常会触发Minor Compaction。不同版本或配置下该数量可能会有所调整。
- 操作内容:
- 选取部分较新且较小的HFile文件进行合并。它不会处理所有的HFile,而是挑选满足条件的一部分。在合并过程中,会将这些HFile中的数据按照Key排序合并成一个新的HFile。如果有相同Key的数据,新的数据会覆盖旧的数据。
- 对系统性能的影响:
- 读性能:Minor Compaction对读性能影响较小。因为它只合并部分HFile,不会对整个存储结构造成大的变动,所以读操作的开销增加有限。
- 写性能:在Minor Compaction进行时,会占用一定的I/O资源用于读取和写入HFile,所以会对写性能有一定影响,但这种影响相对可控,因为它处理的数据量相对较小。
Major Compaction
- 触发条件:
- 手动触发:管理员可以通过命令手动执行Major Compaction。
- 自动触发:每个Region默认每6 - 7天(可配置)会自动触发一次Major Compaction。另外,当HBase检测到某个Region的HFile数量过多、文件大小差异过大等情况时,也可能触发Major Compaction。
- 操作内容:
- 对一个Region下的所有HFile进行合并。将所有HFile中的数据重新排序,合并成一个大的HFile。在合并过程中,会清理掉已标记为删除的数据(墓碑数据),以及过期的版本数据。
- 对系统性能的影响:
- 读性能:Major Compaction完成后,读性能通常会有所提升。因为文件数量减少,数据更加有序,在读取数据时,减少了文件查找和合并的开销。
- 写性能:Major Compaction对写性能影响较大。由于它要处理一个Region下的所有HFile,涉及大量的I/O操作,包括读取所有HFile和写入新的合并文件,会占用大量的磁盘I/O资源,从而导致写操作等待,严重时可能会造成短暂的写阻塞。