Apache GraphAr 0.13.0-incubating 介绍与选型指南
Apache GraphAr 0.13.0-incubating 介绍与选型指南:实查官方文档与发布页,梳理图数据标准文件格式的分块列式模型、多语言库、快速上手与同类选型对比。
Apache GraphAr 0.13.0-incubating 介绍与选型指南
目标:以官方渠道实查的 Apache GraphAr(孵化中)0.13.0 版本为基准,讲清这一图数据标准文件格式的定位、格式模型、多语言库与同类差异,帮助读者判断在数据湖与图生态之间是否需要引入 GraphAr。本文为认知篇,全部信息基于官网、官方文档与 GitHub Releases 联网查证(查询日期 2026-10-18),不含本地安装实测。
一、信息基准
1.1 查询日期与版本依据
| 项目 | 内容 |
|---|---|
| 查询日期 | 2026-10-18 |
| 本文介绍版本 | 0.13.0(官方最新发布版;项目处于 Apache 孵化器,版本标识为 0.13.0-incubating) |
| 版本发布日期 | 2025-08-29(官方下载页 Releases 表格) |
| 版本依据 | 官方下载页 https://graphar.apache.org/download 列出最新源码发布 apache-graphar-0.13.0-incubating-src.tar.gz(仅源码发布);GitHub Releases 最新标签 v0.13.0 |
1.2 官方来源清单
| 来源 | 链接 |
|---|---|
| 官网 | https://graphar.apache.org/ |
| 官方下载页 | https://graphar.apache.org/download |
| 文档总览 | https://graphar.apache.org/docs/ |
| C++ 库入门(含格式示例) | https://graphar.apache.org/docs/libraries/cpp/getting-started |
| GitHub 仓库 | https://github.com/apache/incubator-graphar |
| v0.13.0 发布说明 | https://github.com/apache/incubator-graphar/releases/tag/v0.13.0 |
| 孵化状态声明 | 官网页脚 ASF Incubator 声明 |
二、软件概述
Apache GraphAr(曾名 Gar)0.13.0-incubating 是一个开源、标准化的图数据文件格式(open source, standard data file format for graph data storage and retrieval),用于图数据的存储与检索(来源:官网首页,查询日期 2026-10-18)。它的本质是「格式的规范 + 读写库」,而非图数据库或图计算引擎:GraphAr 定义了如何在文件系统/对象存储上以分块(chunking)、列式存储组织属性图(顶点、边、属性),并保持 CSR/CSC 邻接表语义,让同一份图数据可以被多个引擎按需读取,也支持大图在内存之外(out-of-core)存放与查询,例如存放在数据湖中。
官方列出三大设计要点(来源:官网首页):高效的格式设计(分块、列式、CSR/CSC 语义);支持 out-of-core 查询(大规模图在内存外存储与查询,如数据湖场景);跨语言支持(C++、Java、Scala(Spark)、Python(PySpark)库用于生成、访问与转换 GraphAr 文件)。
项目目前处于 Apache 孵化器(官网页脚声明:Apache GraphAr is an effort undergoing incubation at The Apache Software Foundation),代码以 Apache License 2.0 许可发布。0.13.0 为源码发布,无官方预编译二进制。
三、核心概念与格式模型
3.1 信息文件(YAML)
GraphAr 用一组 YAML 文件保存图的元信息,数据本体为列式数据文件(来源:官方 C++ 库入门文档,查询日期 2026-10-18):
| 信息文件 | 内容 |
|---|---|
| 图信息文件 | 图名、数据文件根目录路径(prefix)、所含顶点/边信息文件清单、GraphAr 格式版本(如 gar/v1) |
| 顶点信息文件 | 单一顶点标签一组的定义:顶点 chunk 大小、数据文件相对路径前缀、属性划分成的属性组(property groups,每组指定文件类型与路径前缀、属性名/类型/是否主键)、格式版本 |
| 边信息文件 | 边的顶点类型对、边 chunk 大小、邻接表类型(CSR/CSC/COO)、边属性组等 |
3.2 分块与列式存储
- chunking:顶点与边都按固定 chunk 大小切分(顶点信息文件中指定 chunk size),每个 chunk 对应一个或一组数据文件,便于并行读取与按需扫描。
- property groups:属性按组拆分,每组独立指定文件类型(CSV、ORC 或 Parquet)与文件路径前缀,读取时可以只加载需要的属性组,减少 IO。
- CSR/CSC 语义:边数据按 CSR(行压缩)/CSC(列压缩)邻接表语义组织,配套 offset 文件,服务图遍历类访问模式。
3.3 版本与多语言库
- 格式版本以
gar/v1等标识写在信息文件中,向前演进有明确协议。 - 官方库覆盖 C++(含 Arrow 依赖,ORC 扩展在 0.13.0 中改为可选)、Java、Spark(Scala)、PySpark(Python);0.13.0 起 Java 库移除了对 Hadoop 的依赖(v0.13.0 发布说明 feat(java) 条目)。
- 0.13.0 新增以 protobuf 定义 GraphAr 格式协议、支持 JSON payload 文件格式(C++/Spark),并加入生成 Go proto 的配置(v0.13.0 发布说明)。
四、功能特性
基于官网与 v0.13.0 发布说明归纳(查询日期 2026-10-18):
- 标准化图存储:把属性图以开放文件格式落盘,任何实现了规范的引擎都能读写,避免图数据锁定在单一系统内。
- 数据湖友好:数据文件即普通列式文件(Parquet/ORC/CSV/JSON),可与数据湖表共存,支持 out-of-core 大图场景。
- 多文件格式:每属性组可选 CSV/ORC/Parquet,0.13.0 增加 JSON payload 支持。
- 多语言生态:C++/Java/Spark/PySpark 四类库,覆盖从 Spark 图处理(GraphX/GraphAr Spark 工具)到本地程序读取的链路。
- 易与图计算/图查询系统集成:官方定位是存储检索格式,可作为图数据库、图分析引擎之间的交换与落地方。
- 孵化期活跃迭代:0.12.0(2024-07-02)到 0.13.0(2025-08-29)完成 C++ 代码结构重构、Java 去除 Hadoop 依赖、protobuf 协议化等多项升级(两版发布说明)。
五、快速上手
以下内容引自官方文档(查询日期 2026-10-18),本文未做本地实测。
1. 理解信息文件。官方 C++ 入门(https://graphar.apache.org/docs/libraries/cpp/getting-started )以 ldbc_sample 示例图给出图信息文件原文:
name: ldbc_sample
prefix: ./
vertices:
- person.vertex.yml
edges:
- person_knows_person.edge.yml
version: gar/v1
该示例图包含一类顶点 person 与一类边 person_knows_person;person 顶点文件中定义两个属性组:第一组仅含 id(主键),第二组含 firstName、lastName 等属性(每组可分别指定 CSV/ORC/Parquet 文件类型)。
2. 构建与读写。官方文档指向 GitHub 仓库 README 的「Building Libraries」步骤安装 GraphAr C++ 库,随后用信息文件构造 GraphInfo,再通过顶点/边读写器以 chunk 为单位读写数据文件;Spark/PySpark 用户使用 GraphAr Spark 包(来源:官方文档 Libraries 分类与仓库 README)。
💡 说明:0.13.0 为源码发布,各语言库需自行从源码构建,构建依赖与步骤以仓库 README 为准。
六、适用场景与限制
6.1 适用场景
- 数据湖上图数据落地:把社交网络、风控关系图等以标准列式格式存于数据湖,供多个引擎消费。
- 图数据在系统间交换:在图数据库导出、图分析框架输入之间提供中立格式,替代私有序列化。
- 大图 out-of-core 分析:图规模超出内存时,用分块列式文件配合 Spark 等引擎分批处理。
- 图与表联合分析:图数据以 Parquet/ORC 形式与常规数仓表共用存储与计算栈。
6.2 限制与风险
- 孵化期项目:官网明确声明孵化状态(not necessarily a reflection of completeness...),API 与格式演进仍在进行,生产引入需评估治理风险。
- 仅源码发布:官方只发布源码包,二进制依赖自建,0.13.0 发布于 2025-08-29,节奏以社区驱动。
- 不是引擎:GraphAr 不提供图查询/索引/事务能力,需要查询能力仍需图数据库。
- 库成熟度不均:C++ 与 Spark 库文档与用例相对完善,Java/PySpark 能力以官方文档「Implementation status」描述为准(来源:官方文档站结构)。
七、同类选型对比
按「图数据存储/交换格式」同类族对比:Neo4j 导出格式(图数据库自带的 GraphML/APOC 导出链路)、GraphML(通用 XML 图交换格式规范)、Apache Arrow(列式内存格式基座,图格式常用其作为底层)。社区数据来源:GitHub 仓库页面 stargazerCount 实查与 GitHub Releases(查询日期 2026-10-18)。
| 维度 | Apache GraphAr 0.13.0 | Neo4j 导出格式 | GraphML | Apache Arrow |
|---|---|---|---|---|
| 许可 | Apache-2.0 | Neo4j 社区版 GPLv3 / 企业版商业许可(导出工具随产品) | 开放规范(GraphML WG,2001 年提出,无单一官方仓库) | Apache-2.0 |
| GitHub stars | 377(apache/incubator-graphar,2026-10-18) | 17337(neo4j/neo4j,2026-10-18) | 不适用(规范) | 17210(apache/arrow,2026-10-18) |
| 最近发版 | v0.13.0(2025-08-29) | 5.26 LTS 线(neo4j/neo4j 最新 tag v5.26.32,2026-10-18 查询) | 规范无发版概念 | apache-arrow-26.0.0(GitHub Releases,2026-10-18 查询) |
| 版本节奏 | 孵化期一年左右一个 minor | 数据库版本高频滚动,LTS 线并行 | 静态规范 | 高频(一年数个 major) |
| 兼容矩阵 | C++/Java/Spark/PySpark,Parquet/ORC/CSV/JSON 文件 | 随 Neo4j 产品与 APOC 插件 | XML 生态通用,多数图工具可导入 | 内存列式标准,C/GLib/C++/Java/Python/Rust 等全语言 |
| 定位 | 属性图标准文件格式(chunk + 列式 + CSR/CSC) | 图数据库自带导入导出 | 通用图交换 XML 格式 | 通用列式内存/交换格式(非图专用) |
选型建议:要把图数据长期放进数据湖、在 Spark 生态与自研服务间共享,GraphAr 是目前少有的面向属性图 + 列式文件的开放标准;已有 Neo4j 且只需搬迁数据,直接用其自带导出(GraphML/APOC)最省事;跨任意图工具的轻量交换用 GraphML 即可;若只需列式底座并自行定义图布局,可直接基于 Apache Arrow。
八、参考链接
- 官网:https://graphar.apache.org/
- 官方下载页:https://graphar.apache.org/download
- 文档总览:https://graphar.apache.org/docs/
- C++ 库入门:https://graphar.apache.org/docs/libraries/cpp/getting-started
- GitHub 仓库:https://github.com/apache/incubator-graphar
- v0.13.0 发布说明:https://github.com/apache/incubator-graphar/releases/tag/v0.13.0
- ASF 孵化器声明:https://graphar.apache.org/(页脚 Incubation 声明)