数据岗位面试题更新 2026-08-05

请阐述 Apache Iceberg 的架构设计,它是如何将数据存储与元数据管理解耦的?

数据系统设计技术原理Apache Iceberg

考察说明

考查对 Iceberg 分层架构及存储与元数据分离机制的理解。

回答思路

  1. 【回答框架 1】Iceberg 的表结构分为三层:数据文件层、元数据层和目录层。数据文件层存放实际数据,按 Parquet/ORC 等格式存储在对象存储或 HDFS 中,不包含任何表结构信息,实现存储与元数据逻辑分离。
  2. 【回答框架 2】元数据层包含三种核心文件:Manifest 文件记录数据文件列表及其统计信息(如分区、列统计),Manifest List 按快照组织多个 Manifest,元数据文件(Metadata File)则保存表 Schema、分区信息、快照列表和 Manifest List 路径。每个快照对应一个一致的元数据文件,实现时间旅行和 ACID 语义。
  3. 【回答框架 3】目录层(Catalog)仅负责存储当前元数据文件的指针,并提供表操作接口(如 create、load、commit)。Iceberg 通过原子性地更新目录中的指针来提交新快照,每次提交生成新的元数据文件,旧文件保留以支持并发读取和历史查询。这种设计使存储和元数据管理在物理上解耦,计算引擎(如 Spark、Flink)只需通过目录获取元数据,再按需读取数据文件。
  4. 【回答框架 4】数据文件与元数据文件分别存储,元数据文件通常较小,可放在便宜的高速存储;数据文件可独立分层(如热/冷数据),便于优化成本和性能。Iceberg 使用乐观并发(基于版本号或 CAS)确保多个写入者提交不冲突,元数据操作与数据写入异步进行,进一步强化分离。
  5. 【关键点 1】Iceberg 通过三层结构(数据文件、元数据文件、目录)实现存储与元数据分离。
  6. 【关键点 2】Manifest 和 Manifest List 记录数据文件的属性和统计,元数据文件保存表结构和快照。
  7. 【关键点 3】每次提交更新目录指针,实现原子性和并发控制,支持时间旅行。
  8. 【关键点 4】存储与元数据物理分离,便于分存储层和数据优化。