博客

从 Icelake 到 Iceberg Rust

XuanwoJul 11, 2024

从 Icelake 到 Iceberg Rust: 开源社区的力量与演变

Icelake 已经停止更新,请改用 iceberg-rust。 Iceberg-rust 是一个由社区驱动的项目,所有 Icelake 的贡献者都已转向该项目。它涵盖了 Icelake 之前提供的所有功能,并且是 Apache Iceberg 的官方实现版本。

引言

我将分享 icelake 和 iceberg-rust 背后的历史。这篇文章将记录一个开放社区是如何运作的:人们因共同的目标而团结,共同努力。这是开源最初的力量,也总是吸引我的地方。

Iceberg 是一种用于巨大分析表的高性能格式。它在全球范围内被广泛使用,并且几乎所有查询引擎都支持它。用户可以编写 SQL 来从存储在对象存储服务中的 Iceberg 表查询数据,无需首先将其导入数据库。 长期以来,Iceberg 缺少官方 Rust 实现,这就是我们故事开始的地方。

Icelake In Databend

我们在 Databend 内部已经讨论了很多次关于支持开放表格格式的话题,我对此非常感兴趣,尤其是 Iceberg。市面上有一些 Iceberg 的绑定存在,但都还未完全准备就绪。因此,我决定启动自己的项目叫做 Icelake。icelake 的主要理念是构建一个开放的湖仓实现方案,能够与任何表格格式兼容,包括 IcebergHudiDelta

这个项目由Databend Labs赞助。我们最初将专注于支持 Iceberg。

多亏了详尽的Iceberg 表格规范,我用了大约一周的时间来实现 Iceberg 规范。在此过程中,我深入了解了表格格式是如何运作的。我已经成功地让 Databend 支持起了 Iceberg 表的读取操作!

Icelake With RisingWave

在 ASF,我们常强调Community Over Code。创建了一个工作示范后,我的首要任务是找到另一位用户。幸运的是,我发现RisingWave也在开展 Iceberg 支持的工作。他们已经使用了Apache OpenDAL,因此我们与 RisingWave 有了一些联系。我直接联系他们,讨论了 icelake,并邀请他们加入开发。 这就是我如何遇见Renjie的。我们俩都怀揣着用 rust 重写大数据生态系统的愿景。能够与他合作让我感觉非常棒。经过几次讨论后,Renjie 决定将 icelake 整合到 RisingWave 中。他和ZENOTME加入了 icelake 项目成为维护者,在那里他们修复了众多 bug 并增加了写入支持。随后,RisingWave 实现了基于 icelake 的 Iceberg sink 功能。

Born of Iceberg Rust

在 icelake 的开发过程中,社区的一些人也认识到了为 Iceberg 提供原生 Rust 支持的必要性。Brian Olsen 发起了关于 Rust 支持 的讨论。维护一个 Iceberg Rust 实现Jan Kaul 加入讨论,并强调了 icelake 的存在。他还提到: It was a great timing to start a rust project in the official apache iceberg repository that we can all work on together. 随后,讨论转移到了 iceberg slack,更多的 Iceberg PMC 成员和提交者加入了进来。Jan Kaul 邀请 Renjie 和我加入关于 Iceberg 的对话——非常感谢! 我们花了一些时间讨论仓库位置,并举行了一次在线会议。我们遇见了 Jan Kual 和Fokko。能够与有着相同目标的人建立联系真是太有意义了。尽管我们以前从未见过面,但共同的目标使我们能够有效地合作。这是开源社区美好的一面! 会议结束后不久,Fokko 帮助我们建立了#rust Slack 频道 和 iceberg-rust 仓库。iceberg rust 项目正式启动,在我的生日(7 月 20 日,考虑到时区变化)这一天。

Grow of Iceberg Rust

在建立了 Iceberg Rust 仓库之后,我们设定了贡献工作流程、CI 操作和发布脚本,还添加了完整的规范实现和 Arrow 集成。 随着开发的进展,更多人加入了我们的团队,包括marvinlanhenkesddviiryaodysa,以及其他 30 位!不到一年时间,我们吸引了 43 名贡献者,并进行了官方 ASF 发布。Renjie 被授予首位来自 Iceberg Rust 项目的 Iceberg 提交者荣誉。他还代表该项目出席了第一届 Iceberg 峰会:将 Apache Iceberg 带入Rust 世界!

Sunset of Icelake

在撰写本文时,Iceberg Rust 已覆盖 icelake 之前提供的所有功能,并现已成为 Apache Iceberg 的官方实现。一些主要使用 icelake 的用户已经或正在转向 Iceberg Rust。

是时候逐步淘汰 icelake 项目,为 Iceberg Rust 让路了。我代表所有 icelake 提交者宣布,我们已正式结束了 icelake 项目。它将不再维护,所有当前用户现在应迁移到 Iceberge Rust。 感谢所有参与和使用 icelike 的贡献者及用户;能够得到你们的支持是极大的荣幸。

Future of Iceberg Rust

目前,Iceberg Rust 社区正在开发 0.3 版本。这个版本将包括大部分用户需要用来读写 Iceberg 表的功能。我们鼓励所有对使用 Rust 操作 Iceberg 感兴趣的人尝试此版本,并为我们提供反馈。

在下一个版本中,我们将整合对 DataFusion 的原生支持,并增强与其他查询引擎连接 Iceberg 的体验,例如Databend。也许我们可以探索支持 iceberg-nodejs 或 iceberg wasm 的新领域。有许多有趣的领域等待我们去发现! 总结

就这些了。感谢大家帮助构建 iceberg-rust。我期待在这一领域做出更多贡献。如果你也感兴趣,请随时联系我;我很乐意提供帮助。

分享本篇文章

订阅我们的新闻简报

及时了解功能发布、产品规划、支持服务和云服务的最新信息!