什么是 Airflow™?¶
Apache Airflow™ 是一个开源平台,用于开发、调度和监控面向批处理的工作流程。Airflow 可扩展的 Python 框架使您能够构建几乎可以连接任何技术的工作流程。Web 界面有助于管理工作流程的状态。Airflow 可以通过多种方式部署,从笔记本电脑上的单个进程到支持最大工作流程的分布式设置。
工作流程即代码¶
Airflow 工作流程的主要特点是所有工作流程都使用 Python 代码定义。“工作流程即代码”服务于多个目的
动态性:Airflow 管道配置为 Python 代码,允许动态生成管道。
可扩展性:Airflow™ 框架包含用于连接众多技术的运算符。所有 Airflow 组件都是可扩展的,可以轻松适应您的环境。
灵活性:利用 Jinja 模板引擎内置了工作流程参数化。
看一下以下代码片段
from datetime import datetime
from airflow import DAG
from airflow.decorators import task
from airflow.operators.bash import BashOperator
# A DAG represents a workflow, a collection of tasks
with DAG(dag_id="demo", start_date=datetime(2022, 1, 1), schedule="0 0 * * *") as dag:
# Tasks are represented as operators
hello = BashOperator(task_id="hello", bash_command="echo hello")
@task()
def airflow():
print("airflow")
# Set dependencies between tasks
hello >> airflow()
在这里,您可以看到
一个名为“demo”的 DAG,从 2022 年 1 月 1 日开始,每天运行一次。DAG 是 Airflow 对工作流程的表示。
两个任务,一个运行 Bash 脚本的 BashOperator 和一个使用
@task
装饰器定义的 Python 函数任务之间的
>>
定义了依赖关系,并控制任务执行的顺序
Airflow 会评估此脚本,并按设置的时间间隔和定义的顺序执行任务。“demo”DAG 的状态在 Web 界面中可见
此示例演示了一个简单的 Bash 和 Python 脚本,但这些任务可以运行任何任意代码。想想运行 Spark 作业、在两个存储桶之间移动数据或发送电子邮件。相同的结构也可以在一段时间内运行
每列代表一次 DAG 运行。这些是 Airflow 中最常用的两个视图,但还有其他几个视图允许您深入了解工作流程的状态。
为什么选择 Airflow™?¶
Airflow™ 是一个批处理工作流程编排平台。Airflow 框架包含用于连接许多技术的运算符,并且可以轻松扩展以连接新技术。如果您的工作流程有明确的开始和结束,并且定期运行,则可以将它们编程为 Airflow DAG。
如果您更喜欢编码而不是点击,那么 Airflow 是您的理想工具。工作流程定义为 Python 代码,这意味着
工作流程可以存储在版本控制中,以便您可以回滚到以前的版本
工作流程可以由多个人同时开发
可以编写测试来验证功能
组件是可扩展的,您可以基于大量现有组件构建
丰富的调度和执行语义使您能够轻松定义定期运行的复杂管道。回填允许您在对逻辑进行更改后在历史数据上(重新)运行管道。并且在解决错误后能够重新运行部分管道有助于最大限度地提高效率。
Airflow 的用户界面提供
对两件事的深入了解
管道
任务
一段时间内管道的概述
您可以从界面中检查日志和管理任务,例如在失败的情况下重试任务。
Airflow 的开源性质确保您使用由全球许多其他 公司 开发、测试和使用的组件。在活跃的 社区 中,您可以找到大量有用的资源,例如博客文章、文章、会议、书籍等。您可以通过多种渠道与其他同行联系,例如 Slack 和邮件列表。
Airflow 作为一个平台是高度可定制的。通过利用 Airflow 的公共接口,您可以扩展和定制 Airflow 的几乎每个方面。
为什么不选择 Airflow™?¶
Airflow™ 是为有限的批处理工作流程而构建的。虽然 CLI 和 REST API 确实允许触发工作流程,但 Airflow 并非为无限运行的事件驱动型工作流程而构建。Airflow 不是流式解决方案。但是,通常会看到 Apache Kafka 等流式系统与 Apache Airflow 一起工作。Kafka 可用于实时摄取和处理,事件数据写入存储位置,Airflow 定期启动处理一批数据的工作流程。
如果您更喜欢点击而不是编码,那么 Airflow 可能不是正确的解决方案。Web 界面旨在使管理工作流程尽可能简单,并且 Airflow 框架不断改进,以使开发人员体验尽可能顺畅。但是,Airflow 的理念是将工作流程定义为代码,因此始终需要编码。