如何快速上手 Apache Airflow:从安装到实战的完整指南

如何快速上手 Apache Airflow:从安装到实战的完整指南 🚀

【免费下载链接】airflow-doc-zh :book: [译] Airflow 中文文档 【免费下载链接】airflow-doc-zh 项目地址: https://gitcode.com/gh_mirrors/ai/airflow-doc-zh

Apache Airflow 是一个开源的工作流管理平台,用于描述、执行和监控复杂的数据工程任务。它允许用户通过 Python 脚本定义工作流,并使用 DAG(有向无环图)来表示任务之间的依赖关系,提供了丰富的任务调度、监控、日志记录和错误处理功能,是数据工程师和数据科学家的理想工具。

1. 认识 Apache Airflow 的核心功能 🔍

1.1 什么是 DAG?有向无环图的魔力

在 Airflow 中,DAG(有向无环图) 是所有任务的集合,以反映其关系和依赖关系的方式进行组织。例如,一个简单的 DAG 可以包含三个任务:A、B 和 C,A 必须在 B 之前运行,而 C 可以独立运行。DAG 不关心任务的具体内容,只确保它们按正确的顺序和时间执行。

Apache Airflow DAG 示例图 图 1:Apache Airflow 中 DAG 分支逻辑示例,展示任务如何根据条件执行不同路径

1.2 从 Operator 到任务:工作流的基本单元

Operator 定义了工作流中单个任务的具体操作,常见类型包括:

  • BashOperator:执行 bash 命令
  • PythonOperator:调用 Python 函数
  • EmailOperator:发送电子邮件
  • PostgresOperator/MySqlOperator:执行 SQL 命令
  • Sensor:等待文件、数据库行等事件触发

当 Operator 被实例化后,就成为 任务(Task),而任务实例(Task Instance)则是任务在特定时间点的运行实例,具有“运行”“成功”“失败”等状态。

2. 零基础安装与启动步骤 ⚡

2.1 环境准备:快速配置依赖

确保已安装 Python 和 pip,然后通过以下命令安装 Airflow:

pip install apache-airflow

2.2 初始化数据库:关键第一步

airflow db init

2.3 启动 Web 服务器与调度器

# 启动 Web 服务器(默认端口 8080)
airflow webserver --port 8080

# 打开新终端,启动调度器
airflow scheduler

2.4 访问 Web 界面:直观管理工作流

访问 http://localhost:8080 即可进入 Airflow 控制台,默认账号密码均为 admin(首次登录需创建)。

Apache Airflow Web 界面 图 2:Apache Airflow Web 控制台,展示任务依赖关系和执行状态

3. 实战:创建你的第一个 DAG 🛠️

3.1 编写 DAG 文件:5 分钟入门

在 Airflow 的 DAG_FOLDER 目录下创建 example_dag.py

from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime

default_args = {
    'owner': 'airflow',
    'start_date': datetime(2023, 1, 1),
}

with DAG(
    'my_first_dag',
    default_args=default_args,
    description='A simple tutorial DAG',
    schedule_interval='@daily',  # 每天执行一次
) as dag:

    t1 = BashOperator(
        task_id='print_date',
        bash_command='date',  # 打印当前日期
    )

    t2 = BashOperator(
        task_id='sleep',
        bash_command='sleep 5',  # 休眠 5 秒
    )

    t1 >> t2  # t1 执行完成后才执行 t2

3.2 运行与监控:在 Web 界面操作

  1. 在 Airflow 控制台的 DAGs 列表中找到 my_first_dag
  2. 点击开关按钮启用 DAG
  3. 点击 Graph View 查看任务依赖图
  4. 右键点击任务 → Trigger DAG 手动触发执行

DAG 执行流程图 图 3:DAG 任务执行流程图,展示任务间的依赖关系和执行顺序

4. 企业级应用案例与最佳实践 💡

4.1 三大核心应用场景

数据管道管理 📊

Airflow 可自动化数据从源系统到目标系统的传输和处理,例如:

  • 定时从 API 拉取数据并存储到数据库
  • 清洗日志文件并加载到数据仓库
ETL 任务调度 🔄

在数据仓库环境中,Airflow 可调度 ETL 流程:

  • 每日凌晨 2 点执行数据抽取(Extract)
  • 转换(Transform)数据格式和结构
  • 加载(Load)到目标表并发送完成通知
机器学习工作流 🤖
  • 定时触发模型训练任务
  • 评估模型精度并生成报告
  • 自动部署达标模型到生产环境

4.2 避坑指南:新手必知的最佳实践

  1. 模块化 DAG
    将复杂逻辑拆分为多个任务,例如:

    # 推荐:拆分任务
    extract = PythonOperator(task_id='extract_data', ...)
    transform = PythonOperator(task_id='clean_data', ...)
    load = PostgresOperator(task_id='load_to_db', ...)
    extract >> transform >> load
    
  2. 错误处理与重试

    t1 = BashOperator(
        task_id='critical_task',
        bash_command='risky_command',
        retries=3,  # 失败重试 3 次
        retry_delay=timedelta(minutes=5),  # 重试间隔 5 分钟
    )
    
  3. 监控与日志
    通过 Web 界面的 Log 按钮查看任务输出,或配置邮件/Slack 告警(参考 zh/howto/operator.md)。

5. 生态集成:扩展 Airflow 能力边界 🌐

Airflow 可与以下工具无缝集成,构建端到端数据平台:

5.1 数据处理与存储

  • Apache Spark:通过 SparkSubmitOperator 调度分布式计算任务
  • Apache Hive:使用 HiveOperator 管理数据仓库表
  • Amazon S3:通过 S3Hook 操作对象存储

5.2 实时流处理

  • Apache Kafka:监控 Kafka 主题并触发数据处理流程
  • Flink:调度 Flink 作业处理实时数据流

5.3 可视化与报表

  • Apache Superset:将 Airflow 输出数据接入 Superset 生成仪表盘
  • Tableau:通过 API 触发 Tableau 报表刷新

Airflow 生态集成架构 图 4:Apache Airflow 与生态系统工具集成架构图

6. 进阶技巧:提升工作流效率 🚀

6.1 SubDAG:简化重复任务

将重复逻辑封装为 SubDAG(子 DAG),例如:

# 子 DAG 工厂函数(参考 zh/concepts.md)
def sub_dag(parent_dag_name, child_dag_name, start_date, schedule_interval):
    with DAG(
        f'{parent_dag_name}.{child_dag_name}',
        start_date=start_date,
        schedule_interval=schedule_interval
    ) as dag:
        t1 = DummyOperator(task_id='sub_task_1')
        t2 = DummyOperator(task_id='sub_task_2')
        t1 >> t2
    return dag

6.2 XCom:任务间数据传递

通过 XCom 在任务间共享小型数据:

# 任务 A 推送数据
def push_data(**context):
    context['task_instance'].xcom_push(key='result', value=100)

# 任务 B 拉取数据
def pull_data(**context):
    value = context['task_instance'].xcom_pull(task_ids='task_a', key='result')
    print(f"Received value: {value}")

6.3 资源限制:使用 Pool 控制并发

在 UI 中创建名为 db_pool、槽位为 5 的资源池,限制数据库任务并发:

task = PostgresOperator(
    task_id='db_task',
    sql='SELECT * FROM users',
    pool='db_pool',  # 关联资源池
    priority_weight=5,  # 优先级权重
)

7. 常见问题与解决方案 ❓

Q1: DAG 未显示在 Web 界面?

A: 检查文件名是否包含 airflowDAG 关键词,或手动刷新 DAGs:

airflow dags list

Q2: 任务一直处于“queued”状态?

A: 确保调度器(scheduler)正在运行,或检查资源池(Pool)是否已满。

Q3: 如何导入自定义 Python 模块?

A: 将模块放入 plugins/ 目录(参考 zh/plugins.md),Airflow 会自动加载。

8. 学习资源与社区支持 📚

  • 官方文档zh/concepts.md(核心概念)、zh/tutorial.md(入门教程)
  • 常见问题zh/faq.md
  • 最佳实践zh/howto/ 目录下的操作指南

通过这些资源,你可以系统掌握 Airflow 的高级功能,例如动态 DAG 生成、加密连接信息、与 Kubernetes 集成等。

Airflow 学习路径 图 5:Apache Airflow 学习路径,从基础操作到高级应用

总结:让工作流自动化变得简单高效 ✨

Apache Airflow 凭借灵活的 DAG 定义、丰富的生态集成和直观的管理界面,已成为数据工程和自动化领域的事实标准。无论是定时任务调度、复杂数据管道,还是机器学习工作流,Airflow 都能帮你实现“一次定义,终身自动化”。

现在就动手创建你的第一个 DAG,体验工作流自动化的强大吧!🚀

【免费下载链接】airflow-doc-zh :book: [译] Airflow 中文文档 【免费下载链接】airflow-doc-zh 项目地址: https://gitcode.com/gh_mirrors/ai/airflow-doc-zh

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值