Iceberg 是一种面向大型分析型表的高性能格式。Iceberg 将 SQL 表的可靠性和简洁性引入大数据领域,同时使 Spark、Trino、Flink、Presto、Hive 和 Impala 等引擎能够安全地同时操作相同的表。
背景信息和文档可在 https://iceberg.apache.org 获取
状态
Iceberg 正在 Apache 软件基金会下进行积极开发。
Iceberg 格式规范 是稳定的,并且每个版本都会添加新功能。
核心 Java 库位于本仓库中,是其他库的参考实现。
所有库和集成的文档均可获取。
协作
Iceberg 在 GitHub 上跟踪问题,并倾向于以拉取请求的形式接收贡献。
社区讨论主要发生在 dev 邮件列表 或特定问题上。
构建
Iceberg 使用 Gradle 和 Java 17 或 21 进行构建。
- 要调用构建并运行测试:
./gradlew build - 要跳过测试:
./gradlew build -x test -x integrationTest - 要修复默认版本的代码风格:
./gradlew spotlessApply - 要修复所有 Spark/Hive/Flink 版本的代码风格:
./gradlew spotlessApply -DallModules
Iceberg 表支持组织在库模块中:
iceberg-common包含在其他模块中使用的工具类iceberg-api包含 Iceberg 的公共 APIiceberg-core包含 Iceberg API 的实现以及对 Avro 数据文件的支持,这是处理引擎应该依赖的模块iceberg-parquet是一个用于处理基于 Parquet 文件的表的可选模块iceberg-arrow是一个用于将 Parquet 读取到 Arrow 内存的可选模块iceberg-orc是一个用于处理基于 ORC 文件的表的可选模块iceberg-hive-metastore是一个基于 Hive metastore Thrift 客户端的 Iceberg 表实现iceberg-data是一个用于直接从 JVM 应用程序处理表的可选模块
Iceberg 还有用于为处理引擎添加 Iceberg 支持的模块:
iceberg-spark是 Iceberg 的 Spark Datasource V2 API 实现,包含针对每个 Spark 版本的子模块(请使用 runtime jars 获取 shaded 版本以避免依赖冲突)iceberg-flink包含用于与 Apache Flink 集成的类(请使用 iceberg-flink-runtime 获取 shaded 版本)iceberg-mr包含 InputFormat 及其他用于与 Apache Hive 集成的类
NOTE
测试需要 Docker 才能执行。在 macOS(使用 Docker Desktop)上,您可能需要为 docker socket 创建一个符号名称,以便被测试检测到:
sudo ln -s $HOME/.docker/run/docker.sock /var/run/docker.sock
在某些情况下,由于 GenericContainer 中的非法状态异常,测试容器可能会因初始化错误而退出。 解决此问题的一种变通方法是在运行测试之前将 selinux 设置为 permissive 模式。
sudo setenforce Permissive
./gradlew ...
sudo setenforce Enforcing
文档
有关构建文档的信息,请参阅此处。
引擎兼容性
请参阅多引擎支持页面,了解 Iceberg 与不同版本 Spark、Flink 和 Hive 的兼容性。 对于 Presto 或 Trino 等其他引擎,请访问其网站以获取 Iceberg 集成详情。
实现
本仓库包含 Iceberg 的 Java 实现。其他实现可在以下位置找到:
- Go: iceberg-go
- PyIceberg (Python): iceberg-python
- Rust: iceberg-rust
- C++: iceberg-cpp