


























最近打开技术社区,满眼都是 Apache Iceberg。无论是在大厂的架构分享中,还是在云厂商的推介里,它都占据了“C位”。
很多刚接触大数据的同学可能会感到困惑:我们不是已经有 HDFS 了吗?不是有 Hive 了吗?甚至文件格式我们也用了 Parquet 和 ORC,为什么还需要一个 Iceberg?它到底是个什么东西?
今天这篇文章,笔者就剥开那些高大上的术语,用最通俗的大白话,带大家看透 Iceberg 火爆背后的逻辑,顺便把 Parquet 这些相关概念也一并理清楚。
在聊 Iceberg 之前,我们得先看看它的“前辈”们——传统数据湖(基于 Hive 也就是文件夹管理模式)有什么问题。
想象一下,你正在往一个 Hive 表里写数据(比如 INSERT INTO),任务跑了一半。
结果是: 虽然任务没结束,但文件已经产生在文件夹里了。这时候如果有下游任务来读取,就会读到“写了一半”的数据(脏读)。这在金融或对数据准确性要求高的场景下,简直是灾难。
在大数据领域,我们通常只做“追加(Append)”,很少做“修改(Update)”或“删除(Delete)”。
如果你想修改 Hive 表里的一行数据,通常的做法是:把整个分区甚至整张表的数据读出来,改好,再全部写回去。 这就好比为了修一个灯泡,把整栋房子拆了重建,效率极低。
当数据量达到 PB 级别,一个表下面可能有几百万个小文件。当你执行 Select * 或者做查询计划时,系统需要去对象存储(如 S3 或 HDFS)上把这几百万个文件列举出来(List 操作)。
痛点: S3/HDFS 的 List 操作在文件很多时非常慢,且不稳定,经常导致任务卡在“Listing files”阶段很久,甚至 OOM(内存溢出)。
为了解决这些“烂泥潭”问题,Table Format(表格式) 的概念应运而生,而 Iceberg 就是其中的佼佼者。
很多小白容易混淆 Parquet 和 Iceberg 的关系。这里笔者做一个最直观的比喻。
Parquet(还有 ORC、Avro)是 文件格式(File Format)。
它决定了数据在磁盘上是怎么摆放的。比如 Parquet 采用列式存储,压缩率高,查特定列很快。
Iceberg 是 表格式(Table Format)。
它不存储实际的数据内容(数据还是存在 Parquet 里),它存储的是 元数据(Metadata)。
一句话总结:Iceberg 是管理 Parquet 文件的大脑,而 Parquet 是存储数据的躯干。
Iceberg 之所以火,是因为它通过一套巧妙的 元数据管理机制(Snapshot 快照机制),完美解决了上面提到的痛点。我们来看看它最牛的几个能力。
还记得刚才说的“读写打架”导致的脏数据吗?
Iceberg 引入了数据库领域的 ACID 能力。当你写入数据时,Iceberg 会生成一个新的“快照(Snapshot)”。
这是 Iceberg 性能起飞的关键。
传统 Hive 查数据,需要去文件系统里 List 所有文件。而 Iceberg 在自己的元数据文件(Manifest Files)里已经记录了每个数据文件的路径、行数、甚至列的最大值最小值。
这是一个让开发者大呼“真香”的功能。
既然 Iceberg 记录了每一次提交的“快照”,那你就可以随意穿越回过去。
比如,你今天发现数据跑错了,想看看昨天这个时候数据长什么样,只需要简单的 SQL(以 Spark SQL 为例):
-- 笔者示例:查询 snapshot_id 为 123456789 时的状态 (按版本号查询)
SELECT * FROM my_table VERSION AS OF 123456789;
或者
-- 笔者示例:查询指定日期下午4点的数据状态 (按时间戳查询)
SELECT * FROM my_table TIMESTAMP AS OF '2025-12-16 16:00:00';
这对于排查 Bug 和数据恢复简直是神器。
在传统数仓里,想给一张大表改个列名或者调整列顺序,往往需要重写数据,或者面临数据错位的风险。
Iceberg 支持完整的 Schema Evolution。你改列名、改类型、加列,Iceberg 只需要修改一下元数据里的定义(Mapping),不需要动底层的 Parquet 文件。
为了让大家更清楚怎么上手,笔者梳理了一个现代数据平台的典型架构图。
工作流示例:
为什么 Iceberg 会火?
因为它在不抛弃廉价存储(S3/HDFS)和成熟文件格式(Parquet)的前提下,赋予了数据湖像数据库(Database)一样严谨的管理能力。
对于小白来说,记住这三个公式:
目前,Iceberg 已经成为构建 Lakehouse(湖仓一体) 架构的事实标准之一。如果你还在用传统的 Hive 方式管理 PB 级数据,不妨尝试一下 Iceberg,它绝对会打开你新世界的大门。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。