apache-airflow

2024-10-03 09:27:57 浏览数 (6)

每个人都在愤世疾俗,每个人又都在同流合污。——《自由在高处》

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 界面中可见:

Demo DAG in the Graph View, showing the status of one DAG runDemo DAG in the Graph View, showing the status of one DAG run

此示例演示了一个简单的 Bash 和 Python 脚本,但这些任务可以运行任意代码。想想运行 Spark 作业、在两个存储桶之间移动数据或发送电子邮件。还可以看到相同的结构随着时间的推移而运行:

Demo DAG in the Grid View, showing the status of all DAG runsDemo DAG in the Grid View, showing the status of all DAG runs

每列代表一个 DAG 运行。这是 Airflow 中最常用的两个视图,但还有其他几个视图可让您深入了解工作流程的状态。

Airflow® 是一个批处理工作流编排平台。Airflow 框架包含用于连接许多技术的运算符,并且可以轻松扩展以连接新技术。如果您的工作流具有明确的开始和结束时间,并且定期运行,则可以将其编程为 Airflow DAG。

如果您更喜欢编码而不是点击,Airflow 是适合您的工具。工作流定义为 Python 代码,这意味着:

  • 工作流可以存储在版本控制中,以便您可以回滚到以前的版本
  • 工作流可以由多人同时开发
  • 可以编写测试来验证功能
  • 组件是可扩展的,您可以在各种现有组件的基础上进行构建

丰富的计划和执行语义使您能够轻松定义定期运行的复杂管道。回填允许您在更改逻辑后对历史数据(重新)运行管道。在解决错误后重新运行部分管道的能力有助于最大限度地提高效率。

Airflow 的用户界面提供:

  1. 深入了解两件事:
  2. 管道
  3. 任务
  4. 一段时间内管道概述

在界面中,您可以检查日志和管理任务,例如在失败时重试任务。

Airflow 的开源性质可确保您使用由全球许多其他公司开发、测试和使用的组件。在活跃的社区中,您可以找到大量有用的资源,包括博客文章、文章、会议、书籍等。您可以通过 Slack 和邮件列表等多个渠道与其他对等节点联系。

Airflow 作为平台是高度可定制的。通过使用 Airflow 的公共接口,您可以扩展和自定义 Airflow 的几乎每个方面。

Airflow® 专为有限批处理工作流而构建。虽然 CLI 和 REST API 确实允许触发工作流,但 Airflow 并不是为无限运行基于事件的工作流而构建的。Airflow 不是流式处理解决方案。但是,经常可以看到 Apache Kafka 等流式处理系统与 Apache Airflow 配合使用。Kafka 可用于实时摄取和处理,事件数据写入存储位置,并且 Airflow 会定期启动处理一批数据的工作流。

如果您更喜欢单击而不是编码,Airflow 可能不是正确的解决方案。Web 界面旨在使管理工作流程尽可能简单,并且 Airflow 框架不断改进,以使开发人员体验尽可能流畅。但是,Airflow 的理念是将工作流定义为代码,因此始终需要编码。

1 人点赞