面试题答案
一键面试Minor Compaction执行步骤
- 选择文件:
- HBase会挑选一些较小的HFile(通常是Store下按照文件大小排序后的较小文件)。这些文件通常是在MemStore刷写过程中产生的较小的HFile。
- 读取数据:
- 同时读取选中的多个HFile中的数据。HFile中的数据是以KeyValue对的形式存储的,按照RowKey排序。读取时会将这些KeyValue对从磁盘读取到内存中。
- 合并数据:
- 在内存中,将从多个HFile读取的KeyValue对按照RowKey进行排序合并。如果遇到相同RowKey的不同KeyValue对,会按照时间戳等规则(通常保留最新时间戳的版本)进行合并。
- 写入新HFile:
- 合并后的数据会被写入到一个新的HFile中。新HFile会根据HBase的文件格式进行组织,包括元数据(如文件信息、索引等)和数据部分(KeyValue对)。这个新的HFile会包含合并后的所有数据。
- 替换旧文件:
- 当新HFile写入完成后,旧的参与合并的HFile会被标记为删除。在合适的时机(如完成一次Major Compaction或经过一定的清理策略),这些被标记删除的旧HFile会被真正从磁盘上删除,而新的HFile则会替代它们,成为Store中的一部分,参与后续的读写操作。
涉及文件及数据处理
- 涉及文件:
- 旧HFile:多个较小的HFile,这些是在MemStore刷写过程中生成的,它们是Minor Compaction的输入文件。
- 新HFile:由合并后的数据生成的新HFile,它是Minor Compaction的输出文件,会替代旧的HFile参与后续的存储和查询操作。
- 数据处理:
- 排序合并:对从旧HFile读取的KeyValue对按RowKey排序合并,相同RowKey的不同版本数据按时间戳等规则保留合适版本。
- 版本处理:在合并过程中,根据HBase的版本保留策略(如保留最新版本等)处理数据版本,确保数据的一致性和准确性。