Apache Gravitino 1.3.0:跨地域、多引擎的元数据湖到底解决了什么问题
项目速览:世界上最强大的开放数据目录,用于构建高性能、地理分布式和联合元数据湖。
秒懂
- 它是什么?
- Apache Gravitino 是一个面向数据湖与数据仓库的联邦式元数据管理项目,最新 1.3.0 版本已发布。本文基于官方文档与仓库信息,拆解它的架构思路、启动方式、适用边界,以及它和直接连 Hive Metastore 这类方案的本质差异。
- 适合谁用?
- Apache Gravitino 适合已经有多套异构元数据源、并且希望用一套 API 做联邦查询和跨地域同步的团队,尤其是那些同时跑 Trino、Spark 和 Iceberg 的环境。它不适合只有单一 Hive Metastore、且没有跨地域需求的场景,那样的架构引入 Gravitino 只会多一层需要维护的服务。
- 能商用吗?
- 可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
- 还在维护吗?
- 在维护。仓库在最近一天内有新的提交。
- 用什么语言写的?
- 主要是 Java(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月17日)和我们的分析,不构成法律意见。
开源项目深度解析
一个元数据问题,三种来源,一套 API
Gravitino 要解决的问题很具体:你的元数据散落在 Hive Metastore、MySQL、MariaDB、HDFS、S3 这些地方,每个系统有自己的模型和访问方式。查询引擎想拿到一份统一的元数据视图,就得分别对接每个源。Gravitino 的做法是提供一个中间层,用单一模型和 API 管理这些异构来源。它把自己定位成元数据湖,而不是又一个 Metastore。这个定位意味着它不替代 Hive Metastore,而是把 Hive Metastore 当作一个可以接入的源。对于同时使用多种存储和引擎的团队,这种中间层能减少连接数量,但代价是引入了一个新的服务节点。
直接集成与地理分布:文档里能看到什么
README 里反复强调两个特性:直接元数据集成和地理分布支持。直接集成的意思是,底层系统的变更会通过 Gravitino 的 connector 立即反映出来,不需要额外同步任务。地理分布则是指元数据可以跨区域、跨云共享。这两个特性听起来很吸引人,但 README 没有给出实现细节。没有提到数据复制机制,没有提到一致性模型,也没有提到跨地域延迟会怎样。从仓库布局看,connector 是核心组件,但具体每个 connector 如何实现直接集成,需要去官方文档确认。我的判断是,地理分布是 Gravitino 区别于普通元数据目录的关键卖点,但也是风险最大的部分,因为跨地域元数据同步的失败模式很多。
启动与配置:五分钟跑起来,但 UI 切换有个坑
本地启动的路径很直接。从官网下载二进制包,解压后编辑 conf/gravitino.conf,然后执行 ./bin/gravitino.sh start 启动,./bin/gravitino.sh stop 停止。README 特别提到 UI 版本的选择:默认用 Web V2,如果想回退到旧的 v1 UI,需要编辑 conf/gravitino-env.sh 或者设置环境变量 GRAVITINO_USE_WEB_V2=false,然后重启。这个细节值得注意,说明项目还在 UI 过渡期,v1 和 v2 并存。如果你是从旧版本升级,可能需要检查自己的脚本是否依赖 v1 的接口。另外,从源码构建需要 Gradle,而且 README 明确说 Windows 目前不支持。这对 Windows 开发者是个硬性限制,要么用 Linux 或 macOS,要么用容器。
Iceberg 和 Lance:原生 REST Catalog 服务
Gravitino 不只是元数据管理,它还内置了 Iceberg REST catalog 服务和 Lance REST catalog 服务。这意味着如果你的引擎支持 Iceberg REST 协议,可以直接把 Gravitino 当作 catalog 端点来用,不需要额外部署 Iceberg 的 catalog 服务。Lance 是一个较新的列式格式,Gravitino 对它的支持说明项目在跟进新格式,但 README 没有给出 Lance 的具体用途。对于使用 Iceberg 的团队,这个原生集成省去了一层组件,是实实在在的收益。但要注意,REST catalog 服务只是入口,底层元数据仍然通过 Gravitino 的模型来管理,所以你需要理解 Gravitino 的命名空间和表模型,而不是 Iceberg 的原生模型。
Trino 集成:不用改 SQL 方言,但 connector 是前提
README 提到 Gravitino 包含一个 Trino connector,用于联邦元数据访问。这意味着 Trino 用户可以通过这个 connector 查询不同数据源的表,而不需要为每个源单独配置 catalog。这听起来很方便,但前提是 Gravitino 已经正确配置了对应的数据源连接。多引擎兼容是 Gravitino 的一个卖点,但 README 只明确提到了 Trino,Spark 只是在使用场景里带了一句。如果你用的是其他引擎,比如 Presto 或 ClickHouse,需要去文档确认是否有官方支持。没有 connector 的引擎,就只能通过 Gravitino 的 REST API 来访问元数据,那就失去了无缝集成的意义。
AI 资产管理:还在路上,别指望生产可用
README 把 AI 资产管理列为 WIP,支持 AI 模型和特征追踪。这是 Gravitino 面向未来的布局,但既然是 WIP,意味着功能不完整,接口可能变化。对于 AI 团队来说,如果你现在就需要模型血统或特征存储,Gravitino 不是现成的答案。这个特性更像是项目在展示方向,而不是当前能力。我的建议是,不要因为 AI 资产管理这个卖点而选择 Gravitino,现阶段它只是路线图上的一个点。
替代方案:直接连 Hive Metastore 或使用 LakeFS
Gravitino 的替代方案不是另一个元数据湖,而是更简单的路径。如果你只用 Hive 或 Iceberg,直接使用 Hive Metastore 或 Iceberg 自己的 catalog 服务就够了,不需要引入 Gravitino。另一个方向是 LakeFS,它提供数据湖的版本控制,但它的重点在数据版本和分支,而不是跨源元数据联邦。LakeFS 和 Gravitino 的差异在于:LakeFS 管理的是对象存储中的数据版本,Gravitino 管理的是元数据本身。如果你的痛点是数据回滚和分支,LakeFS 更合适;如果你的痛点是多个元数据源无法统一查询,Gravitino 才是候选。这个对比说明,选择 Gravitino 的前提是你确实有联邦需求。
维护成本与许可证:Apache-2.0 的代价是你要自己运维
Gravitino 采用 Apache-2.0 许可证,这是宽松许可证,你可以自由使用和修改,不需要开源自己的代码。但许可证宽松不意味着维护成本低。Gravitino 是一个独立服务,需要部署、监控、升级。它的版本更新频率看起来不低,1.1.1 到 1.3.0 只隔了三个月,这意味着你需要定期跟进版本,否则可能错过 bug 修复。另外,从源码构建需要 Gradle,而且不支持 Windows,这限制了构建环境的灵活性。如果你不想自己维护,可以考虑托管服务,但 README 没有提到任何官方托管选项。所以,采用 Gravitino 的团队需要接受一个事实:你多了一个需要打补丁的 Java 服务。
编辑结论
Apache Gravitino 适合已经有多套异构元数据源、并且希望用一套 API 做联邦查询和跨地域同步的团队,尤其是那些同时跑 Trino、Spark 和 Iceberg 的环境。它不适合只有单一 Hive Metastore、且没有跨地域需求的场景,那样的架构引入 Gravitino 只会多一层需要维护的服务。在决定采用前,先确认三件事:你的查询引擎是否有官方 connector,你的元数据源是否在支持的列表里,以及你能否接受 Windows 无法构建源码的限制。1.3.0 的发布说明和官方文档是你验证这些细节的唯一可靠来源,仓库 README 只给了概览。
社区笔记