>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Rust

无需厚重 Java 的 Rust 版 Apache Iceberg

如果你从事大数据工作,很可能已经接触过 Apache Iceberg。从本质上讲,它是基于 Parquet 或 ORC 文件构建 Lakehouse 架构的标准。长期以来,Java 一直是 Iceberg 的主要归宿。几乎所有官方库和与 Spark 或 Trino 的集成都是为 JVM 编写的。

然而,数据处理工具栈正在向 Rust 转变。Apache DataFusion、Polars 等项目需要访问 Iceberg 表,但无需启动繁重的 Java 运行时或处理 JNI 绑定。就这样,Apache 基金会内部出现了一个官方仓库 apache/iceberg-rust

为什么要移植到 Rust

原生实现提供高性能和低内存开销。当你要编写流处理的微服务、工具程序或 PostgreSQL 自定义外部数据包装器时,拖着 JVM 是很痛苦的。JVM 在启动时需要占用数百兆内存,并且会因垃圾回收而定期冻结。

Rust 库可以直接从轻量级二进制文件中读取 Iceberg 元数据和数据。项目在 Apache 基金会内部开发,所以这不是一个私有分支,而是一个官方的基础设施组件。

仓库结构

开发者没有把所有东西打包成一个巨大的单体项目。项目被拆分成了多个独立的模块。你只需要在服务中引入实际需要的依赖。

库的核心位于模块 iceberg 中。它处理元数据解析、清单操作和表模式操作,符合 Iceberg v1 和 v2 规范。

为元数据目录的工作创建了独立的 crate:

  • iceberg-catalog-rest 用于 REST API 操作
  • iceberg-catalog-glue 用于 AWS Glue Data Catalog 集成
  • iceberg-catalog-hms 用于连接 Hive Metastore
  • iceberg-catalog-sql 用于在 PostgreSQL 或 SQLite 中存储元数据
  • iceberg-catalog-s3tables 用于使用 Amazon S3 Tables

模块 iceberg-storage-opendal 处理 S3、GCS 或本地磁盘等物理存储。它使用 Apache OpenDAL 库,这立即打开了对所有流行对象存储的访问。

如果你需要查询执行引擎,模块 iceberg-datafusion 会很有用。这个模块将 Iceberg 绑定到 Apache DataFusion SQL 引擎,使你能够直接从 Rust 对表执行 SQL 查询。

已投入生产的使用场景

开发工作很活跃,但已有严肃的产品在生产环境中使用这个库:

  • Databend 在其云数据仓库中使用了它。
  • RisingWave 利用该库从其实时数据库中处理 Iceberg。
  • Supabase 在 Postgres 扩展和流式 ETL 服务中使用了 Rust Iceberg 组件。
  • Moonlink 使用该库在不到一秒的时间内完成从 Postgres 到 Iceberg 格式的 CDC 数据复制任务。
  • Apache DataFusion Comet 使用它来加速 Spark 性能。

支持与版本管理

项目团队遵循 MSRV(最低支持的 Rust 版本)策略。代码针对稳定版 Rust 发布版本进行构建和测试。最低支持的编译器版本相对于最近的版本有大约三个月的缓冲期。

开发完全公开。所有讨论都在 [email protected] 邮件列表和 Apache Iceberg 官方 Slack 社区的 #rust 频道中进行。

值得一试吗

如果你正在围绕数据仓库构建服务、编写 Rust 连接器或开发自己的数据处理工具,iceberg-rust 看起来是最合乎逻辑的选择。

该库仍在完善以覆盖整个 Iceberg 规范,但基本的读取、写入和对关键目录的支持已经稳定运行。对于基于 DataFusion 的项目,它已经是一个可用的构建块。

相关项目