面试题答案
一键面试1. 检查阶段
- 作用:HBase 会定期检查列族下的 Store 中的 StoreFile。判断是否有满足合并条件的 StoreFile,比如文件数量是否达到预设的阈值,文件大小是否符合合并要求等。这是触发 Compaction 的前置步骤,只有通过这个检查,才会进入后续真正的合并操作。
2. 选择阶段
- 作用:从满足合并条件的 StoreFile 集合中,挑选出要参与本次 Compaction 的具体 StoreFile。选择策略通常基于文件大小、时间戳等因素。例如,可能会优先选择较小的文件,或者选择较旧的文件,以优化存储布局和读取性能。
3. 读取阶段
- 作用:读取选定的 StoreFile 中的数据。HBase 会按顺序从这些 StoreFile 中读取 Key - Value 对。这是为后续的合并操作准备数据,将分散在不同 StoreFile 中的数据读取到内存中,以便重新组织。
4. 合并阶段
- 作用:将读取到的 Key - Value 对按 Key 进行排序和合并。在这个过程中,如果遇到相同 Key 的不同版本的数据,会根据 HBase 的版本策略(如保留最新版本等)进行处理。经过合并后,生成新的有序的 Key - Value 数据集合。
5. 写入阶段
- 作用:将合并后的数据写入到新的 StoreFile 中。完成写入后,旧的参与 Compaction 的 StoreFile 会被标记为可删除(在适当时候被清理)。新的 StoreFile 会替换旧文件,从而优化了 HBase 的存储结构,提高数据读取性能。