面试题答案
一键面试- 触发合并
- 作用:HBase 会基于多种条件触发 HFile 合并,如 Region 中 HFile 的数量超过阈值(默认情况下,当一个 Region 内 HFile 数量达到 3 个时会触发 minor 合并),或者是由于手动执行合并操作等。这一步决定了何时开始合并流程,以优化存储和查询性能。
- 挑选待合并文件
- 作用:根据一定的策略从当前 Region 的所有 HFile 中选择要参与合并的文件。例如在 minor 合并中,通常选择较小的、相邻的 HFile 进行合并,这样可以减少合并时的 I/O 开销和数据量处理。在 major 合并时,会选择该 Region 下的所有 HFile 进行合并。挑选合适的文件能确保合并过程高效且达到优化存储结构的目的。
- 读取数据
- 作用:从挑选出的 HFile 中读取数据。HFile 是以键值对形式存储数据的,读取过程会按顺序遍历文件中的键值对,为后续的排序和写入新文件做准备。此步骤将原文件数据加载到内存中进行处理。
- 排序
- 作用:将读取到的所有键值对按照 Key 进行排序。HBase 中数据是按 Key 有序存储的,通过排序可以确保合并后的文件依然保持这种有序性,从而保证查询操作能够高效执行。排序算法通常采用外部排序,因为数据量可能较大,无法完全加载到内存中。
- 写入新 HFile
- 作用:将排序后的键值对写入到新的 HFile 中。新 HFile 的格式符合 HBase 的存储规范,包括数据块、索引块、元数据块等结构的构建。写入过程会根据数据块大小等配置参数,将数据分块写入,并生成相应的索引信息,便于后续数据的快速定位和读取。
- 替换旧文件
- 作用:当新的 HFile 成功写入后,会将旧的参与合并的 HFile 替换掉。Region 元数据会被更新,指向新的 HFile,这样在后续的读写操作中就会使用新的合并后的文件。替换旧文件完成了整个合并流程,使得 Region 的存储结构得到优化。