airflow任务依赖调度需先运行最小dag,再添加依赖逻辑并加固生产约束;关键配置包括catchup=false、max_active_runs=1和depends_on_past=true,确保依赖真实生效。

安装配置 Airflow 并实现任务依赖调度,关键不在装得多快,而在结构清晰、依赖可控、运行可查。核心是:先跑通一个最小 DAG,再叠加依赖逻辑,最后加固生产约束。
快速安装与基础环境准备
推荐使用 Python 3.8+ 和 pip 安装,避免 conda 环境兼容性问题:
- 执行 pip install apache-airflow(默认含 SQLite,适合本地验证)
- 初始化数据库:airflow db init
- 创建初始用户:airflow users create --username admin --password admin --firstname Admin --lastname User --role Admin --email admin@example.com
- 启动 Web 服务和 Scheduler:airflow webserver & airflow scheduler
访问 http://localhost:8080,用刚建的账号登录即可看到空 UI。注意:生产环境必须换用 PostgreSQL 或 MySQL,并关闭 SQLite。
定义第一个带依赖的 DAG 文件
在 $AIRFLOW_HOME/dags/ 下新建 hello_dependent.py:
- 用 PythonOperator 定义两个简单任务(如打印时间、返回字符串)
- 设置 start_date 为过去某天(如 datetime(2023, 1, 1)),避免因时间过新导致调度不触发
- 用 schedule_interval='@daily' 启用定时,或设为 None 用于手动测试
- 用 task1 >> task2 显式声明依赖,表示 task2 必须等 task1 成功后才运行
保存后,Airflow 会自动扫描并加载该 DAG。几秒后在 UI 的 Graph View 中就能看到两个节点连线——这就是最简依赖关系的可视化呈现。
让依赖真正“生效”的三个关键配置
很多初学者写完 >> 却发现任务并行跑、不等待,往往是忽略了这些硬性约束:
- catchup=False:防止历史调度堆积导致依赖链批量触发,调试阶段务必加上
- max_active_runs=1:限制同一 DAG 同时只运行一个实例,避免多轮调度交叉干扰依赖判断
- depends_on_past=True(可选):强制当前任务只在上一轮同名任务成功后才启动,适合严格串行场景
这三个参数加在一起,才能确保 “A→B” 不只是画线,而是真实按序执行、失败即中断、不跳步不抢跑。
跨任务与跨 DAG 的依赖进阶
单 DAG 内依赖只是起点。真实业务常需更复杂协调:
- 多个上游任务都完成后才执行下游:用 [task_a, task_b] >> task_c
- 等待另一个 DAG 的某个任务完成:引入 ExternalTaskSensor,指定
external_dag_id和external_task_id - 主动触发另一个 DAG 运行:用 TriggerDagRunOperator,适合事件驱动型流程(如文件到达即启动处理)
注意:跨 DAG 依赖必须确保被依赖 DAG 已启用,且目标任务存在;sensor 类任务建议设 timeout 和 mode='poke' 防止无限等待。











