血缘元数据采集开放标准:OpenLineage Integrations Apache Airflow Usage

An Open Standard for lineage metadata collection.

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 中手动注解任务

进一步了解

反馈

可通过 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_NAMESPACEMARQUEZ_URLMARQUEZ_API_KEY 变量进行配置,以替代标准的
OPENLINEAGE_NAMESPACEOPENLINEAGE_URLOPENLINEAGE_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 的版本。

风险提示与免责声明

本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。