Airflow 公共接口¶
Apache Airflow 的公共接口是 Apache Airflow 中的一组接口和行为,其更改受语义版本控制的约束。用户通过创建和管理 DAG、管理任务和依赖关系,以及通过编写新的执行器、插件、操作器和提供程序来扩展 Airflow 功能,来与 Airflow 的公共接口进行交互。公共接口可用于构建自定义工具和与其他系统的集成,以及自动化 Airflow 工作流的某些方面。
使用 Airflow 公共接口¶
以下是 Airflow 公共接口的一些示例
当您编写自己的操作器或钩子时。这通常在您的用例不存在钩子或操作器时完成,或者可能在存在钩子或操作器但您需要自定义行为时完成。
编写新的 插件 来扩展 Airflow 的功能,使其超出 DAG 构建块。密钥、时间表、触发器、监听器都是此类功能的示例。这通常由管理 Airflow 实例的用户完成。
通过 提供程序包 将自定义操作器、钩子、插件捆绑在一起发布 - 这通常由那些打算为 Airflow 集成的外部服务或应用程序提供可重用功能集的人完成。
使用任务流 API 编写任务
依赖于 Airflow 对象的一致行为
“公共接口”的一个方面是扩展或使用 Airflow Python 类和函数。下面提到的类和函数可以依赖于在 Airflow 的主要版本中保持向后兼容的签名和行为。另一方面,以 _
开头的类和方法(也称为受保护的 Python 方法)和 __
开头的类和方法(也称为私有的 Python 方法)不属于 Airflow 公共接口的一部分,并且可能会随时更改。
您还可以通过 稳定 REST API(基于 OpenAPI 规范)使用 Airflow 的公共接口。对于特定需求,您还可以使用 Airflow 命令行界面 (CLI),尽管其行为在细节上可能会发生变化(例如输出格式和可用标志),因此如果您想以编程方式依赖这些,建议使用稳定 REST API。
为 DAG 作者使用公共接口¶
DAG¶
DAG 是 Airflow 的核心实体,表示一个循环工作流。您可以通过在 DAG 文件中实例化 DAG
类来创建 DAG。您还可以通过 DagBag
类实例化它们,该类从文件或文件夹中读取 DAG。DAG 还可以通过 Param
类指定参数。
Airflow 有一组示例 DAG,您可以使用它们来学习如何编写 DAG
您可以在 DAG 中阅读有关 DAG 的更多信息。
DAG 中使用的模块的参考如下
操作器¶
基类 BaseOperator
和 BaseSensorOperator
是公共的,可以扩展以创建新的操作器。
在 Apache Airflow 中发布的 BaseOperator 的子类在*行为*上是公共的,但在*结构*上不是公共的。也就是说,操作器的参数和行为受语义版本控制,但方法可能会随时更改。
任务实例¶
任务实例是 DAG(在 DAG 运行中)中单个任务的单个运行。它们在通过 TaskInstance
类传递给操作器的 execute 方法的上下文中可用。
任务实例键¶
任务实例键是 DAG(在 DAG 运行中)中任务实例的唯一标识符。键是一个元组,由 dag_id
、task_id
、run_id
、try_number
和 map_index
组成。可以通过 key()
检索任务实例的键。
钩子¶
钩子是与外部平台和数据库的接口,在可能的情况下实现通用接口并充当操作器的构建块。所有钩子都派生自 BaseHook
。
Airflow 有一组被认为是公共的钩子。您可以通过扩展它们来自由扩展它们的功能
Airflow 公共实用程序¶
在编写或扩展钩子和操作器时,DAG 作者和开发人员可以使用以下类
Connection
,它提供对外部服务凭据和配置的访问。Variable
,它提供对 Airflow 配置变量的访问。XCom
,用于访问任务间通信数据。
您可以在 管理连接、变量、XCom 中阅读有关 Airflow 公共实用程序的更多信息
用于实用程序的类的参考如下
公共实用程序类¶
使用公共接口扩展 Airflow 功能¶
Airflow 使用插件机制来扩展 Airflow 平台功能。它们允许扩展 Airflow UI,但它们也是公开以下自定义项(触发器、时间表、监听器等)的方式。提供程序还可以实现插件端点并自定义 Airflow UI 和自定义项。
您可以在插件中阅读有关插件的更多信息。您可以在从 Airflow Web 界面自定义 Apache 视图中阅读如何扩展 Airflow 界面。请注意,界面有一些简单的自定义不需要插件 - 您可以在自定义界面中阅读有关它们的更多信息。
以下是插件可用于扩展 Airflow 的方法
触发器¶
Airflow 使用触发器来实现与 asyncio
兼容的可延迟运算符。所有触发器都派生自 BaseTrigger
。
Airflow 有一组被认为是公共的触发器。您可以通过扩展它们来自定义其功能
您可以在可延迟运算符和触发器中阅读有关触发器的更多信息。
时间表¶
自定义时间表实现为 Airflow 的调度程序提供了额外的逻辑,以使用内置调度表达式无法实现的方式调度 DAG 运行。所有时间表都派生自 Timetable
。
Airflow 有一组被认为是公共的时间表。您可以通过扩展它们来自定义其功能
您可以在使用时间表自定义 DAG 调度中阅读有关时间表的更多信息。
监听器¶
监听器使您能够响应 DAG/任务生命周期事件。
这是通过 ListenerManager
类实现的,该类提供了可以实现以响应 DAG/任务生命周期事件的钩子。
2.5 版中的新功能: 监听器公共接口已在 2.5 版中添加。
您可以在监听器中阅读有关监听器的更多信息。
使用公共接口与外部服务和应用程序集成¶
Airflow 中的任务可以通过钩子和运算符来编排外部服务。Airflow 的核心功能(例如身份验证)也可以扩展以利用外部服务。您可以在提供程序包和提供程序包中阅读有关它们可以提供的核心扩展的更多信息。
执行器¶
执行器是任务实例运行的机制。所有执行器都派生自 BaseExecutor
。Airflow 中内置了几种执行器实现,每种都有其独特的特性和功能。
执行器接口本身(BaseExecutor 类)是公共的,但内置执行器不是(即 KubernetesExecutor、LocalExecutor 等)。这意味着,以 KubernetesExecutor 为例,我们可能会在 Airflow 次要版本或补丁版本中对其进行更改,这可能会破坏继承自 KubernetesExecutor 的执行器。这是必要的,以便让 Airflow 开发人员有足够的自由来继续改进我们提供的执行器。因此,如果您想修改或扩展内置执行器,您应该将完整的执行器代码合并到您的项目中,这样这些更改就不会破坏您的派生执行器。
您可以在执行器中阅读有关执行器以及如何编写自己的执行器的更多信息。
2.6 版中的新功能: 执行器接口在 Airflow 中已经存在很长时间了,但在 2.6 版之前,代码库中的其他地方有特定于执行器的代码。从 2.6 版开始,执行器是完全解耦的,这意味着 Airflow 核心不再需要知道特定执行器的行为。您可以在 Airflow 2.6 之前成功实现自定义执行器,并且许多人做到了,但是有一些硬编码的行为更喜欢内置执行器,并且自定义执行器无法提供内置执行器具有的完整功能。
密钥后端¶
可以将 Airflow 配置为依赖密钥后端来检索 Connection
和 Variable
。所有密钥后端都派生自 BaseSecretsBackend
。
所有密钥后端实现都是公共的。您可以扩展它们的功能
身份验证管理器¶
身份验证管理器负责 Airflow 中的用户身份验证和用户授权。所有身份验证管理器都派生自 BaseAuthManager
。
身份验证管理器接口本身(BaseAuthManager
类)是公共的,但身份验证管理器的不同实现不是(即 FabAuthManager)。
您可以在身份验证管理器中阅读有关身份验证管理器以及如何编写自己的身份验证管理器的更多信息。
身份验证后端¶
身份验证后端可以扩展 Airflow 身份验证机制的工作方式。您可以在身份验证后端中找到有关身份验证的更多信息,该文档还显示了社区提供程序中实现的可用身份验证后端。如果身份验证后端是在提供程序中实现的,则它是提供程序公共接口的一部分,而不是 Airflow 的一部分。
装饰器¶
DAG 作者可以使用装饰器来使用 TaskFlow 概念创作 DAG。所有装饰器都派生自 TaskDecorator
。
Airflow 有一组被认为是公共的装饰器。您可以通过扩展它们来自定义其功能
您可以在创建自定义 @task 装饰器中阅读有关创建自定义装饰器的更多信息。