08-Apache Iceberg 通俗指南:给“胡乱堆放”的文件加个“智能账本”

08-Apache Iceberg 通俗指南:给"胡乱堆放"的文件加个"智能账本"

在大数据的世界里(比如 HDFS 或 S3),文件通常是散落着的。比如一个"用户表",实际上是文件夹里堆着的 10000 个 csv 或 parquet 小文件。

这导致了几个严重的痛点:

  1. 读写打架:我在写第 10001 个文件时,你正好来读,可能会读到写了一半的脏数据,或者报错。
  2. 修改困难:我想把"张三"改名成"李四"。但我不知道张三在哪几个文件里,难道要把 10000 个文件全翻一遍重写?太慢了!
  3. 甚至不知道刚才版本啥样:只要覆盖了,旧数据就没了,没法"后悔"。

于是,Apache Iceberg 出现了。它不是一个新的存储介质(数据还是存在 HDFS/S3 上),它是一种 Table Format (表格式)。


1. 核心思想:Snapshot (快照) 与 Manifest (清单)

Iceberg 的做法是:不信任文件目录,只信任账本。

  • 普通 HDFS/Hive:看这个文件夹里有啥文件,这表就有啥数据。(像只有仓库,没账本)。
  • Iceberg :文件夹里有什么我不关心。我看我的 Metadata (元数据/账本)。

怎么运作?

  1. 快照 (Snapshot):每次你要写数据,Iceberg 就会生成一个新的"账本页面"(Snapshot S1, S2...)。
  2. 清单 (Manifest):账本里详细记录了:"这次操作新增了文件 A,删除了文件 B"。
  3. 读数据:读取者先看最新的账本,账本说有哪些文件,我就只读那些文件。哪怕文件夹里还有一堆垃圾文件,只要账本上没记,我就当不存在。

2. 解决了什么问题?(ACID 能力)

由于有了这个精准的账本:

  • 原子性 (Atomicity):你要么成功生成新账本,要么失败。不会让别人读到"写了一半且没上账"的文件。
  • 并发读写 :你写你的(在生成新账本),我读我的(读旧账本)。互不干扰。这就叫 MVCC (多版本并发控制)。
  • 时间旅行 (Time Travel):我想看昨天的数据?翻开昨天的账本(Snapshot ID xxx),按那个清单找文件就行了。数据回滚简直是秒级操作。
  • 高效更新 (Upsert) :支持 DELETE 和 UPDATE。虽然底层可能还是重写文件,但 Iceberg 帮我们管理了哪些文件失效、哪些是新的,对用户来说就像操作 MySQL 一样方便。

3. 数据湖三剑客:Iceberg vs Hudi vs Delta

其实试图解决这个问题的不仅有 Iceberg,还有另外两位高手:

  • Apache Iceberg:设计极其优雅,兼容性最好(Netflix 开发)。目前在国外大厂极其流行,被认为是未来的标准。
  • Apache Hudi:Uber 开发。对"流式写入"和"即时更新"支持得特别好。国内很多大厂(字节、阿里)用得很多。
  • Delta Lake:Databricks 公司开发。和 Spark 绑定得最紧密,性能优化做得很好。

他们统称为 "数据湖仓" (Data Lakehouse) 技术 ------ 既有数据湖的便宜(存 S3/HDFS),又有数据仓库的好用(支持 SQL, ACID, Update)。


总结

Iceberg 就是给杂乱无章的大数据文件系统,请了一位拥有超强记忆力的会计 。

从此以后,我们不再通过"翻箱倒柜"来找数据,而是通过"查账本"来精准定位。

相关推荐
分布式存储与RustFS5 天前
对象存储正在吞掉数据湖:RustFS 1.0 GA 与 MinIO AIStor Tables 把 2026 风向说清楚
iceberg·数据湖·对象存储·minio·s3·rustfs·ai存储
网络豆13 天前
Apache Maven 鸿蒙 PC 适配全记录:把 JVM 构建工具交付到 HiShell
maven·apache·harmonyos
网络豆13 天前
Apache Hive 鸿蒙 PC 适配全记录:以 Qt 客户端打通 HiveQL、监控与元数据访问
hive·apache·harmonyos
网络豆13 天前
Apache HBase 鸿蒙 PC 适配全记录:用 Qt 原生客户端打通 REST 管理与数据读写
apache·hbase·harmonyos
无巧不成书021814 天前
Apache Tomcat 9 下载全指南(Windows,Linux,macOS):版本选型、国内镜像、SHA-512 与 PGP 完整性校验
windows·tomcat·apache
Dream-Y.ocean14 天前
鸿蒙平台 Apache Tomcat 管理控制台适配实战:基于 Electron 壳方案的真实 HTTP 服务器实现
tomcat·apache·harmonyos
betazhou14 天前
Apache seatunel常用配置参数解析说明
apache·seatunnel
凤山老林15 天前
Spring Boot 集成 Apache Kafka Streams 构建流处理应用:状态存储、窗口聚合与
spring boot·kafka·apache
DolphinScheduler社区16 天前
Apache DolphinScheduler 8 月报:权限安全加固,调度补火上线,性能与稳定性持续提升
大数据·安全·开源·apache·任务调度·海豚调度
sbjdhjd16 天前
从 7 字符文件名拼接到二维数组取值:PHP 无参函数限制下的受控靶场复盘 | (7字符绕过)
网络·nginx·安全·网络安全·云计算·php·apache