惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Engineering at Meta
Engineering at Meta
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Martin Fowler
Martin Fowler
雷峰网
雷峰网
Recent Announcements
Recent Announcements
博客园 - 叶小钗
F
Full Disclosure
C
Check Point Blog
A
About on SuperTechFans
L
LangChain Blog
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
博客园 - 司徒正美
C
Cybersecurity and Infrastructure Security Agency CISA
C
CXSECURITY Database RSS Feed - CXSecurity.com
Cisco Talos Blog
Cisco Talos Blog
Hugging Face - Blog
Hugging Face - Blog
Recorded Future
Recorded Future
MongoDB | Blog
MongoDB | Blog
Project Zero
Project Zero
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Know Your Adversary
Know Your Adversary
D
Docker
U
Unit 42
酷 壳 – CoolShell
酷 壳 – CoolShell
T
The Exploit Database - CXSecurity.com
L
Lohrmann on Cybersecurity
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Latest news
Latest news
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LINUX DO - 最新话题
Google DeepMind News
Google DeepMind News
小众软件
小众软件
NISL@THU
NISL@THU
GbyAI
GbyAI
H
Heimdal Security Blog
Jina AI
Jina AI
I
InfoQ
PCI Perspectives
PCI Perspectives
P
Privacy International News Feed
P
Proofpoint News Feed
N
News and Events Feed by Topic
C
CERT Recently Published Vulnerability Notes
aimingoo的专栏
aimingoo的专栏
SecWiki News
SecWiki News
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志

博客园 - AlfredZhao

Docker 容器不写代理,临时用 OS 变量解决网络问题 impdp 遇到 TSTZ Version 报错:ORA-39405 处理实践 数据乱成一锅粥,还能先做本体吗? SQL*Plus 执行中文 SQL 文件,如何避开乱码坑 Podman 报错:普通用户无法运行 rootless Podman 怎么办 语义层构建:企业级AI落地绕不开的关键 AI时代最扎心的真相:人类在打杂,AI在做决策 Win7老系统登录报错怎么解?PuTTY这次真能救急 Linux 主机防火墙如何同时开启 80 和 443? AI 编程变更记录:知识加工模块与博客工厂模块的状态重新定义 一篇搞定:用 curl 测试私有部署模型联通性 DBA除了修库,还能把经验变成更大的价值 原本3GB+ 的 Docker 镜像直接缩成500M RAG技术从1.0到4.0,系统为何越来越“会想” 生产环境里,为什么不建议把普通端口直接暴露到公网? ORACLE默默地搞了个免费的智能体工厂 GPT 省钱,不是别用最新模型,而是别浪费缓存 Docker 容器时区不对,`timedatectl` 不存在怎么办? AI 编程工作总结:从体验问题到模块能力建设 OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G? vi 删除指定范围的行,不用再反复按 dd AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础 AI编程系列01:裸 API 账单场景下,如何自建 LLM 用量可视化看板 氛围编程实战系列:先规划清楚学习路径 入门:我的第一个Vibe Coding实践程序 Linux时区修改为CST 如何在Oracle Agent Factory中配置国内厂商的LLM? Oracle Deep Data Security (Deep Sec) 初体验 APEX实战第13篇:全套开发环境的本地配置与恢复实践 Codex 和 OpenClaw,到底差在哪? 微信对接OpenClaw的常见问题和解决方案 在群晖NAS上配置OpenClaw:一次踩坑后的保姆级教程(完整修订版) 用Docker安全驯服OpenClaw,并打通社交软件 RAG 时代的“破壁人”:为什么你的大模型应用急需 Docling? 为什么 AI 服务器首选 Ubuntu?难道 OEL 和 RHEL 不香吗? APEX实战第12篇:Oracle APEX 工作区密码忘记了怎么办? AI开发者如何无痛部署Oracle AI Database 26ai环境 Oracle 26ai 本地通用版这次是真的来了 Docker 快速入门:手把手教你打包 Python 应用 APEX实战第11篇:图形界面轻松解锁工作区账户 APEX实战第10篇:手把手教你给APEX打补丁 APEX实战第9篇:手把手教你集成RAS轻松实现真正的数据安全 小白学AI开发01:创建第一个示例Agent LangChain、LangFlow、LangGraph:一文讲清三大 LLM 框架的定位与差异 使用 Oracle 官方 HR Demo 快速验证 RAS 功能(小白实战指南) Oracle RAS:AI时代企业数据安全核心 新版MOS(My Oracle Support)主要变化 APEX实战第8篇:ORDS连库报错574?一招根治用户过期问题
为什么 Iceberg 在数据湖领域这么火
AlfredZhao · 2025-12-16 · via 博客园 - AlfredZhao

最近打开技术社区,满眼都是 Apache Iceberg。无论是在大厂的架构分享中,还是在云厂商的推介里,它都占据了“C位”。

很多刚接触大数据的同学可能会感到困惑:我们不是已经有 HDFS 了吗?不是有 Hive 了吗?甚至文件格式我们也用了 Parquet 和 ORC,为什么还需要一个 Iceberg?它到底是个什么东西?

今天这篇文章,笔者就剥开那些高大上的术语,用最通俗的大白话,带大家看透 Iceberg 火爆背后的逻辑,顺便把 Parquet 这些相关概念也一并理清楚。

01 | 痛点:传统数据湖的“烂泥潭”

在聊 Iceberg 之前,我们得先看看它的“前辈”们——传统数据湖(基于 Hive 也就是文件夹管理模式)有什么问题。

① 数据的“隔离性”差(读写打架)

想象一下,你正在往一个 Hive 表里写数据(比如 INSERT INTO),任务跑了一半。
结果是: 虽然任务没结束,但文件已经产生在文件夹里了。这时候如果有下游任务来读取,就会读到“写了一半”的数据(脏读)。这在金融或对数据准确性要求高的场景下,简直是灾难。

② 修改数据简直是噩梦

在大数据领域,我们通常只做“追加(Append)”,很少做“修改(Update)”或“删除(Delete)”。
如果你想修改 Hive 表里的一行数据,通常的做法是:把整个分区甚至整张表的数据读出来,改好,再全部写回去。 这就好比为了修一个灯泡,把整栋房子拆了重建,效率极低。

③ 文件列表(Listing)慢到怀疑人生

当数据量达到 PB 级别,一个表下面可能有几百万个小文件。当你执行 Select * 或者做查询计划时,系统需要去对象存储(如 S3 或 HDFS)上把这几百万个文件列举出来(List 操作)。
痛点: S3/HDFS 的 List 操作在文件很多时非常慢,且不稳定,经常导致任务卡在“Listing files”阶段很久,甚至 OOM(内存溢出)。

为了解决这些“烂泥潭”问题,Table Format(表格式) 的概念应运而生,而 Iceberg 就是其中的佼佼者。

02 | 核心:厘清“文件格式”与“表格式”

很多小白容易混淆 ParquetIceberg 的关系。这里笔者做一个最直观的比喻。

① Parquet 是“集装箱”

Parquet(还有 ORC、Avro)是 文件格式(File Format)
它决定了数据在磁盘上是怎么摆放的。比如 Parquet 采用列式存储,压缩率高,查特定列很快。

  • 角色: 它只负责存数据本身(Data),它不知道这批数据属于哪个表,也不知道这一天的数据是不是完整的。

② Iceberg 是“物流管理系统”

Iceberg表格式(Table Format)
它不存储实际的数据内容(数据还是存在 Parquet 里),它存储的是 元数据(Metadata)

  • 角色: 它记录了一张表里有哪些 Parquet 文件(Manifest),这些文件是属于哪个版本的,哪些文件被删除了,哪些是新加的。

一句话总结:Iceberg 是管理 Parquet 文件的大脑,而 Parquet 是存储数据的躯干。

03 | 揭秘:Iceberg 为什么能“火”?

Iceberg 之所以火,是因为它通过一套巧妙的 元数据管理机制(Snapshot 快照机制),完美解决了上面提到的痛点。我们来看看它最牛的几个能力。

① ACID 事务能力

还记得刚才说的“读写打架”导致的脏数据吗?
Iceberg 引入了数据库领域的 ACID 能力。当你写入数据时,Iceberg 会生成一个新的“快照(Snapshot)”。

  • 原理: 只有当数据全部写完,Iceberg 才会原子性地把“当前版本指针”指向这个新快照。
  • 效果: 读者要么读到旧版本,要么读到完整的新版本,永远不会读到“写了一半”的数据,实现了读写分离。

② 极速的查询规划(不依赖 Listing)

这是 Iceberg 性能起飞的关键。
传统 Hive 查数据,需要去文件系统里 List 所有文件。而 Iceberg 在自己的元数据文件(Manifest Files)里已经记录了每个数据文件的路径、行数、甚至列的最大值最小值。

  • 效果: 查询时,引擎直接读元数据就知道要扫哪些文件(Data Skipping),直接跳过不相关的文件,完全不需要去调用缓慢的 HDFS/S3 List 接口。

③ 隐藏技能:时间旅行(Time Travel)

这是一个让开发者大呼“真香”的功能。
既然 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 和数据恢复简直是神器。

④ 丝滑的 Schema 演进

在传统数仓里,想给一张大表改个列名或者调整列顺序,往往需要重写数据,或者面临数据错位的风险。
Iceberg 支持完整的 Schema Evolution。你改列名、改类型、加列,Iceberg 只需要修改一下元数据里的定义(Mapping),不需要动底层的 Parquet 文件。

  • 体验: 秒级完成表结构变更,对生产环境几乎无影响。

04 | 实战:Iceberg 在架构中的位置

为了让大家更清楚怎么上手,笔者梳理了一个现代数据平台的典型架构图。

  • 计算层(谁来做): Spark, Flink, Trino, StarRocks —— 它们负责“算”和“写”。
  • 中间层(Iceberg): <-- Iceberg 就在这里
    • Catalog(目录): 记录表的最顶层入口(如 Hive Metastore, AWS Glue)。
    • Metadata(元数据): 管理快照、Manifest 文件列表。
  • 存储层(存哪里): HDFS / S3 / OSS / MinIO —— 负责物理存储。
  • 文件格式(怎么存): Parquet / ORC / Avro —— 负责物理编码。

工作流示例:

  1. Flink 实时消费 Kafka 数据。
  2. Flink 调用 Iceberg 的库,将数据转换并写入底层的 Parquet 文件。
  3. Flink 每隔一段时间(Checkpoint),通过 Iceberg 提交一次 元数据快照
  4. SparkTrino 感知到新快照,即可实时查询到几秒钟前刚写入的数据,实现“流批一体”。

05 | 总结与展望

为什么 Iceberg 会火?
因为它在不抛弃廉价存储(S3/HDFS)和成熟文件格式(Parquet)的前提下,赋予了数据湖像数据库(Database)一样严谨的管理能力。

对于小白来说,记住这三个公式:

  1. Iceberg != 存储软件(它是一个管理数据的协议/库)。
  2. Iceberg = 元数据管理 + 文件布局标准
  3. Iceberg 让数据湖里的数据变得“可信”、“可回溯”、“更强壮”。

目前,Iceberg 已经成为构建 Lakehouse(湖仓一体) 架构的事实标准之一。如果你还在用传统的 Hive 方式管理 PB 级数据,不妨尝试一下 Iceberg,它绝对会打开你新世界的大门。