1. 数据湖仓时代:为什么需要 Iceberg 和 Delta Lake?
说实话,过去五年我一直在跟数据架构打交道。从早期的 Hadoop Hive,到后来的 Spark SQL,再到现在的湖仓一体,这条路我走得挺深的。很多人问我:为什么突然冒出个 Iceberg 和 Delta Lake?它们到底解决了什么问题?
嗯,要回答这个问题,得先聊聊传统数据架构的痛点。
1.1 传统数据仓库的困境
数据仓库这个概念不新。早年间我们用 Teradata、Oracle、Greenplum,后来用 Snowflake、Redshift。它们很成熟,但有个硬伤——数据一旦进了仓库,就很难再跟外部系统高效交互。
举个例子。我在 2018 年做过一个金融项目,数据从 Kafka 流进来,经过 Spark 清洗,最后落到 Hive 表里。但 Hive 不支持 ACID 事务,数据写一半任务挂了,表就坏了。修复起来特别痛苦,得手动删分区、重跑任务。你想想看,生产环境里这种事发生一次就够呛。
传统数仓的典型问题包括:
- 不支持事务:并发写入容易产生脏数据
- 文件管理混乱:小文件堆积,查询性能越来越差
- Schema 变更困难:加个字段要全表重写
- 数据回滚成本高:没有快照机制,出错了只能重跑
核心矛盾:数据仓库需要强一致性,但底层存储(HDFS/S3)天生不支持事务。这个鸿沟,就是 Iceberg 和 Delta Lake 要填的。
1.2 数据湖的兴起与阵痛
数据湖的概念大概在 2015 年左右火起来。核心思想很简单:把所有数据(结构化、半结构化、非结构化)都扔到廉价存储上,用的时候再处理。
这个想法本身没错。我见过很多团队把几十 TB 的日志、点击流、IoT 数据直接往 S3 上怼。但问题很快就来了——数据湖变成了数据沼泽。
为什么?因为没有统一的元数据管理。你往 Hive 里写数据,Spark 读的时候可能看到的是半成品。你删了一批文件,但元数据没更新,查询就报错。更麻烦的是,两个任务同时写同一个表,互相覆盖,数据对不上。
我记得有一次线上事故:数据工程师跑了一个批处理任务,覆盖了前一天的正确数据。因为没有版本管理,恢复花了整整两天。从那以后,我就在想——数据湖能不能像数据库一样,支持事务、快照、回滚?
1.3 湖仓一体的核心诉求
湖仓一体(Lakehouse)这个概念,说白了就是把数据仓库的 ACID 能力搬到数据湖上。它要满足几个关键需求:
- 事务支持:并发读写不冲突,要么全成功要么全失败
- Schema 演化:加字段、删字段不影响历史数据
- 时间旅行:能查询任意时间点的数据快照
- 高性能查询:支持文件剪枝、分区裁剪、统计信息优化
- 开放格式:不绑定特定计算引擎,Spark、Flink、Trino 都能用
这些需求,传统 Hive 做不到,Hudi 早期版本也做得不够好。而 Iceberg 和 Delta Lake 就是在这个背景下诞生的。
我的建议:选型之前,先搞清楚你的核心场景。如果只是做离线批处理,Delta Lake 的简单易用可能更合适。如果追求开放性和多引擎兼容,Iceberg 是更好的选择。后面几章我会详细对比。
1.4 Iceberg 与 Delta Lake 的定位
这两个项目虽然目标相似,但出身和设计哲学完全不同。
| 维度 | Iceberg | Delta Lake |
|---|---|---|
| 发起方 | Netflix(后捐给 Apache) | Databricks |
| 核心设计 | 表格式规范 + 开放 API | Spark 原生 + 事务日志 |
| 事务模型 | 乐观并发控制(OCC) | 乐观并发控制(OCC) |
| Schema 演化 | 支持(列级增删改) | 支持(列级增删改) |
| 时间旅行 | 基于快照 ID | 基于版本号 |
| 文件格式 | Parquet / ORC / Avro | Parquet |
| 计算引擎 | Spark、Flink、Trino、Hive、Presto | Spark(为主)、Flink、Presto |
从表格能看出来,Iceberg 更强调开放性和多引擎兼容,而 Delta Lake 更偏向Spark 生态的深度整合。这不是谁好谁坏的问题,而是适用场景不同。
1.5 一张图看懂湖仓时代
下面这张图是我自己画的,帮你理清数据湖仓时代的核心组件关系。
从这张图能看出来,表格式层是湖仓一体的核心。它夹在底层存储和计算引擎之间,提供事务、索引、快照等能力。没有这一层,数据湖就只是个文件堆。
1.6 为什么是现在?
你可能想问:这些技术几年前就有了,为什么现在才火?
原因有三:
- 存储成本下降:对象存储(S3、OSS)越来越便宜,存几百 TB 数据不再是问题
- 计算引擎成熟:Spark、Flink 已经能稳定处理 PB 级数据
- 业务需求升级:实时分析、数据科学、AI 训练都需要统一的数据底座
我最近参与的一个项目,客户把 200+ 张 Hive 表迁移到了 Iceberg。迁移之后,查询性能提升了 3-5 倍,数据回滚从小时级降到了分钟级。这就是湖仓一体带来的实际价值。
注意:湖仓一体不是银弹。如果你的数据量很小(几百 GB 以内),传统关系型数据库可能更合适。湖仓一体的优势在大规模、多引擎、高并发场景下才能体现出来。
1.7 本章小结
数据湖仓时代的到来,本质上是存储成本下降 + 计算引擎成熟 + 业务需求升级三者共同推动的结果。Iceberg 和 Delta Lake 作为表格式层的代表,解决了传统数据湖缺乏事务、版本管理、Schema 演化等核心痛点。
我个人认为,未来三到五年,湖仓一体会成为企业数据架构的主流选择。而 Iceberg 和 Delta Lake 的选型,将直接影响你的数据平台能否支撑业务的高速发展。