HBase的合并机制主要通过Compaction实现,旨在优化数据存储和提高读写性能。Compaction分为Minor Compaction和Major Compaction,两者在触发条件和处理数据上有所不同。
HBase合并机制的触发条件
- Minor Compaction:当StoreFile数量达到
hbase.hstore.compaction.min
(默认3)且满足文件大小条件时触发,主要合并部分小的、相邻的StoreFile,不会处理已删除或过期的数据[3](@ref]。
- Major Compaction:通常在手动触发或满足一定时间间隔后执行,会合并所有StoreFile,并清理被删除的数据、TTL过期数据和多余版本的数据。
HBase合并机制的具体流程
- Minor Compaction流程:
- 选择待合并的HFile集合。
- 从线程池中选出合适的处理线程。
- 分别读出待合并HFile文件的Key-Value,进行归并排序处理。
- 将排序后的数据写入临时文件。
- 将临时文件移动到对应HStore的数据目录。
- 更新WALs日志并打上Compaction标记。
- 强制执行sync,删除旧文件[4](@ref]。
- Major Compaction流程:
- Major Compaction是Minor Compaction的升级,会处理所有StoreFile。
- 过程包括读取、排序、写入新文件,并删除旧文件,同时清理无效数据[4](@ref。
HBase合并机制的影响因素
- Compaction的触发条件,包括MemStore刷新、手动触发、后台线程轮询等。
- 系统参数配置,如
hbase.server.thread.wakefrequency
和hbase.server.compactchecker.interval.multiplier
,影响Compaction的执行频率[3](@ref]。
- 数据模型和写入模式,如LSM树结构下的小文件问题,以及写入操作的频率和模式。