每个人都在愤世疾俗,每个人又都在同流合污。——《自由在高处》
Apache Airflow® 是一个开源平台,用于开发、安排和监控面向批处理的工作流。Airflow 的可扩展 Python 框架使您能够构建与几乎任何技术连接的工作流。Web 界面有助于管理工作流程的状态。Airflow 可以通过多种方式进行部署,从笔记本电脑上的单个进程到分布式设置,以支持最大的工作流程。
官方文档:
https://airflow.apache.org/
github:
https://github.com/apache/airflow/
Airflow 工作流的主要特点是所有工作流都在 Python 代码中定义。“工作流即代码”有以下几个用途:
- 动态:Airflow 管道配置为 Python 代码,允许生成动态管道。
- 可扩展:Airflow® 框架包含用于连接众多技术的运算符。所有 Airflow 组件都是可扩展的,以便轻松适应您的环境。
- 灵活:工作流参数化是利用 Jinja 模板引擎构建的。
请看以下代码片段:
代码语言:javascript复制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 DAG。
如果您更喜欢编码而不是点击,Airflow 是适合您的工具。工作流定义为 Python 代码,这意味着:
- 工作流可以存储在版本控制中,以便您可以回滚到以前的版本
- 工作流可以由多人同时开发
- 可以编写测试来验证功能
- 组件是可扩展的,您可以在各种现有组件的基础上进行构建
丰富的计划和执行语义使您能够轻松定义定期运行的复杂管道。回填允许您在更改逻辑后对历史数据(重新)运行管道。在解决错误后重新运行部分管道的能力有助于最大限度地提高效率。
Airflow 的用户界面提供:
- 深入了解两件事:
- 管道
- 任务
- 一段时间内管道概述
在界面中,您可以检查日志和管理任务,例如在失败时重试任务。
Airflow 的开源性质可确保您使用由全球许多其他公司开发、测试和使用的组件。在活跃的社区中,您可以找到大量有用的资源,包括博客文章、文章、会议、书籍等。您可以通过 Slack 和邮件列表等多个渠道与其他对等节点联系。
Airflow 作为平台是高度可定制的。通过使用 Airflow 的公共接口,您可以扩展和自定义 Airflow 的几乎每个方面。
Airflow® 专为有限批处理工作流而构建。虽然 CLI 和 REST API 确实允许触发工作流,但 Airflow 并不是为无限运行基于事件的工作流而构建的。Airflow 不是流式处理解决方案。但是,经常可以看到 Apache Kafka 等流式处理系统与 Apache Airflow 配合使用。Kafka 可用于实时摄取和处理,事件数据写入存储位置,并且 Airflow 会定期启动处理一批数据的工作流。
如果您更喜欢单击而不是编码,Airflow 可能不是正确的解决方案。Web 界面旨在使管理工作流程尽可能简单,并且 Airflow 框架不断改进,以使开发人员体验尽可能流畅。但是,Airflow 的理念是将工作流定义为代码,因此始终需要编码。