
OpenLineage 是一个用于元数据和血缘采集的开放标准,专为在作业运行时动态采集数据而设计。它通过统一的命名策略定义了由作业(Job)、运行实例(Run)和数据集(Dataset) 组成的通用模型,并通过可扩展的Facets机制对这些实体进行元数据增强。
该项目是 LF AI & Data 基金会的毕业级项目,处于活跃开发阶段,欢迎社区贡献。
Apache Airflow
本页介绍的是主要用于 Airflow 版本低于 2.7 的外部集成。如果你使用的是 Airflow 2.7 及以上版本,请查阅原生 Airflow OpenLineage 提供程序文档。
后续的开发与增强将聚焦于
apache-airflow-providers-openlineage
包,而openlineage-airflow
将主要进行缺陷修复。查看 此集成支持的所有 Airflow 版本
Airflow 是一款广泛使用的自动化工作流与调度平台,可用于编写和管理数据管线。Airflow 使用由有向无环图(DAG)任务构成的工作流。如需进一步了解 Airflow,请查看 官方文档。
Airflow 如何与 OpenLineage 协同工作?
理解复杂的 DAG 间依赖关系,并为 DAG 执行提供实时可见性可能颇具挑战。OpenLineage 与 Airflow 集成以收集 DAG 血缘元数据,使得 DAG 间依赖关系可以通过血缘图轻松维护和查看,同时还能为 DAG 的历史运行建立目录。

收集的 DAG 元数据可以回答以下问题:
- DAG 为何失败?
- 在代码变更后,DAG 运行时间为何增加?
- DAG 的上游依赖有哪些?
如何使用此集成?
若要将 OpenLineage 接入你的 Airflow 实例,请按照 以下说明 操作。
如何为更多算子添加血缘覆盖?
OpenLineage 提供了一组 extractors
,用于从算子中提取血缘信息。
若要为你的自定义算子添加血缘覆盖,请遵循 为算子添加血缘的说明。
若要为无法修改的算子添加覆盖,请遵循 添加自定义提取器的说明。
若想在单个工作流中暴露血缘信息,你还可以在 DAG 中手动注解任务。
进一步了解
- 查看 Marquez 的 Airflow 示例,了解如何为 Airflow DAG 启用 OpenLineage 元数据收集,并使用 Marquez 排查失败的 DAG。
- 观看 OpenLineage 与 Airflow 的数据血缘
反馈
可通过 Slack 联系我们并留下反馈!
使用 Airflow 集成
本页介绍的是主要用于 Airflow 版本低于 2.7 的外部集成。如果你使用的是 Airflow 2.7 及以上版本,请查阅原生 Airflow OpenLineage 提供程序文档。
后续的开发与增强将聚焦于
apache-airflow-providers-openlineage
包,而openlineage-airflow
将主要进行缺陷修复。查看 此集成支持的所有 Airflow 版本
前置条件
要使用 OpenLineage Airflow 集成,你需要一个正在运行的 Airflow 实例。你还需要一个兼容 OpenLineage 的 后端。
安装
安装前请查看 支持的 Airflow 版本。
要下载并安装最新版 openlineage-airflow
库,请运行:
shell
openlineage-airflow
你也可以将 openlineage-airflow
添加到 Airflow 的 requirements.txt
中。
若要从源码安装,请运行:
bash
python3 setup.py install
配置
接下来,指定你希望 OpenLineage 将事件发送至何处。
我们建议使用 openlineage.yml
文件配置客户端,该文件告知客户端如何连接到 OpenLineage 后端。查看具体方法。
最简单的方式(仅限 HTTP 客户端)是使用环境变量。
例如,要将 OpenLineage 事件发送到本地 Marquez 实例,请使用:
bash
OPENLINEAGE_URL=http://localhost:5000
OPENLINEAGE_ENDPOINT=api/v1/lineage # 此为默认值,当变量未设置时可省略
OPENLINEAGE_API_KEY=secret_token # 仅在需要认证头时设置,否则可省略
如需进行额外配置,或将事件发送到非 HTTP 服务器目标(例如 Kafka topic),请配置客户端。
注意: 如果使用的 Airflow 版本低于 2.3.0,需进行额外配置。
环境变量
除了 Python 客户端变量 外,Airflow 集成还支持以下专属环境变量。
名称 | 描述 | 示例 |
---|---|---|
OPENLINEAGE_AIRFLOW_DISABLE_SOURCE_CODE | 设为 False 可防止 PythonOperator 或 BashOperator 中的可调用对象源代码被包含进 OpenLineage 事件。 |
False |
OPENLINEAGE_EXTRACTORS | 可选的提取器类列表(以分号分隔的字符串),用于加载自定义提取器。 | full.path.to.ExtractorClass;full.path.to.AnotherExtractorClass |
OPENLINEAGE_NAMESPACE | 可选的血缘数据所属命名空间。如未指定,默认为 default 。 |
my_namespace |
OPENLINEAGE_AIRFLOW_LOGGING | Airflow 中 OpenLineage 客户端的日志级别(Python 客户端的 OPENLINEAGE_CLIENT_LOGGING 变量在此处无效)。 | DEBUG |
为向后兼容,openlineage-airflow
也支持通过
MARQUEZ_NAMESPACE
、MARQUEZ_URL
和 MARQUEZ_API_KEY
变量进行配置,以替代标准的
OPENLINEAGE_NAMESPACE
、OPENLINEAGE_URL
和 OPENLINEAGE_API_KEY
。
不同前缀的变量不可混用。
使用
启用后,集成将执行以下操作:
- 在 TaskInstance 启动 时,收集每个任务的元数据。
- 收集任务输入/输出元数据(来源、架构等)。
- 收集任务运行级元数据(执行时间、状态、参数等)。
- 在 TaskInstance 完成 时,同时在 Marquez 中将任务标记为完成。
支持的 Airflow 版本
本页介绍的是主要用于 Airflow 版本低于 2.7 的外部集成。如果你使用的是 Airflow 2.7 及以上版本,请查阅原生 Airflow OpenLineage 提供程序文档。
后续的开发与增强将聚焦于
apache-airflow-providers-openlineage
包,而openlineage-airflow
将主要进行缺陷修复。查看 此集成支持的所有 Airflow 版本
支持的 Airflow 版本
Airflow 2.7+
从 Airflow 2.7.0 开始 不应 使用此包,并且在 Airflow 2.8+ 中 无法 使用。
该包设计为面向 Airflow 版本低于 2.7 的外部集成。
对于 Airflow 2.7+,请使用原生 Airflow OpenLineage 提供程序
包 apache-airflow-providers-openlineage
。
Airflow 2.3 - 2.6
注意: 支持 Airflow 2.3-2.4 的最后一个 openlineage-airflow 版本为 1.33.0
从 Airflow 2.3 开始,只要该集成已安装在 Airflow 工作节点的 Python 环境中,它会自动注册。
这意味着除了配置事件发送位置(详见 配置 章节)外,无需额外操作。
Airflow 2.1 - 2.2
注意: 支持 Airflow 2.1-2.2 的最后一个 openlineage-airflow 版本为 1.14.0
这些版本下的集成存在限制:不支持跟踪失败任务,
任务启动仅在任务结束时才被记录(基于 LineageBackend
的方法会在每个任务完成时收集该任务的所有元数据)。
为使 OpenLineage 生效,除安装 openlineage-airflow
外,还需在 airflow.cfg 中或通过环境变量 AIRFLOW__LINEAGE__BACKEND
指定 LineageBackend
为
shell
openlineage.lineage_backend.OpenLineageBackend
OpenLineageBackend 不会考虑手动配置的 inlets 与 outlets。
Airflow <2.1
OpenLineage 不支持低于 Airflow 2.1 的版本。
风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。