Airflow 中文文档教程:从入门到实战
Apache Airflow 是一个开源的工作流管理平台,用于编排和调度复杂的数据工程任务。它允许用户通过 Python 脚本定义工作流,并使用 DAG(有向无环图)来表示任务之间的依赖关系。Airflow 提供了丰富的功能,如任务调度、监控、日志记录和错误处理,使其成为数据工程师和数据科学家的理想工具。
快速开始
安装 Airflow
首先确保已经安装了 Python 和 pip,然后使用以下命令安装 Airflow:
# airflow 需要 home 目录,默认是~/airflow,
# 但是如果你需要,放在其它位置也是可以的
# (可选)
export AIRFLOW_HOME=~/airflow
# 使用 pip 从 pypi 安装
pip install apache-airflow
# 初始化数据库
airflow initdb
# 启动 web 服务器,默认端口是 8080
airflow webserver -p 8080
# 启动定时器
airflow scheduler
# 在浏览器中浏览 localhost:8080,并在 home 页开启 example dag
运行这些命令后,Airflow 将创建$AIRFLOW_HOME文件夹,并放置一个airflow.cfg文件,其默认值可以让您快速上手。
DAG 概念与示例
DAG(有向无环图)是 Airflow 的核心概念,它表示任务之间的依赖关系和工作流的结构。以下是一个基本的 DAG 定义示例:
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2015, 6, 1),
'email': ['airflow@example.com'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
}
dag = DAG('tutorial', default_args=default_args, schedule_interval=timedelta(days=1))
# 定义任务
t1 = BashOperator(
task_id='print_date',
bash_command='date',
dag=dag)
t2 = BashOperator(
task_id='sleep',
bash_command='sleep 5',
retries=3,
dag=dag)
# 设置任务依赖关系
t1 >> t2
功能特性
模版功能
Airflow 充分利用了 Jinja Templating 的强大功能,为 pipeline 作者提供了一组内置参数和宏:
templated_command = """
{% for i in range(5) %}
echo "{{ ds }}"
echo "{{ macros.ds_add(ds, 7)}}"
echo "{{ params.my_param }}"
{% endfor %}
"""
t3 = BashOperator(
task_id='templated',
bash_command=templated_command,
params={'my_param': 'Parameter I passed in'},
dag=dag)
任务依赖管理
Airflow 提供了多种方式来定义任务之间的依赖关系:
# 设置下游依赖
t1.set_downstream(t2)
# 设置上游依赖
t2.set_upstream(t1)
# 使用位移运算符
t1 >> t2
# 链式依赖
t1 >> t2 >> t3
# 批量设置依赖
t1 >> [t2, t3]
测试与验证
命令行测试
在部署前,可以通过命令行工具测试 DAG:
# 打印所有活跃的 DAG
airflow list_dags
# 打印指定 DAG 的所有任务
airflow list_tasks tutorial
# 测试单个任务
airflow test tutorial print_date 2015-06-01
# 回填执行
airflow backfill tutorial -s 2015-06-01 -e 2015-06-07
应用场景
数据管道管理
Airflow 常用于管理复杂的数据管道,确保数据从源系统到目标系统的传输和处理过程自动化。
ETL 任务调度
在数据仓库环境中,Airflow 可以调度 ETL(提取、转换、加载)任务,确保数据及时更新。
机器学习工作流
在机器学习项目中,Airflow 可以调度模型训练、评估和部署任务,确保模型持续优化。
最佳实践
-
模块化 DAG设计:将复杂的 DAG 分解为多个模块化的任务,提高代码的可维护性和可读性。
-
错误处理机制:使用 Airflow 的错误处理机制,如重试和警报,确保任务失败时能够及时处理。
-
监控和日志:利用 Airflow 的监控和日志功能,实时跟踪任务的执行情况,及时发现和解决问题。
-
参数化配置:使用默认参数和模板变量,使 DAG 配置更加灵活和可重用。
生态集成
Airflow 可以与多个大数据生态系统项目集成:
- Apache Kafka:用于实时数据流的处理和传输
- Apache Spark:用于大规模数据处理和分析
- Apache Hive:用于数据仓库的构建和管理
- Apache Superset:用于数据可视化和报表生成
通过这些生态项目的集成,Airflow 可以构建更加复杂和强大的数据处理和分析平台。
总结
Apache Airflow 是一个功能强大的工作流管理平台,通过 Python 代码定义复杂的数据处理流程。它提供了灵活的调度机制、强大的依赖管理、丰富的操作符库和完善的监控功能,是构建数据管道和自动化工作流的理想选择。
通过本教程,您已经了解了 Airflow 的基本概念、安装配置、DAG 定义和任务管理。接下来可以继续探索 Airflow 的高级特性,如自定义操作符、XCom 跨任务通信、插件开发等,以构建更加复杂和强大的数据处理工作流。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考






