Apache Airflow 3:用代码搭建数据工作流调度的完整指南,5分钟跑通第一个DAG
Apache Airflow 3:用代码搭建数据工作流调度的完整指南,5分钟跑通第一个DAG
【免费下载链接】airflowApache Airflow - A platform to programmatically author, schedule, and monitor workflows项目地址: https://gitcode.com/GitHub_Trending/ai/airflow
每天早上9点,你要挨个跑十几个数据任务,手动等上一个跑完再启动下一个;一个失败,整天白干还查不到断点在哪。Apache Airflow 就是为这种调度混乱准备的——一个用 Python 代码定义、自动调度并监控工作流(DAG)的平台,适合被数据管道和定时任务折磨的数据工程师与运维同学。
它解决了什么问题
Airflow 的定位很简单:工作流即代码。你用 Python 把流程写出来,交给它之后,调度、重试、监控全部自动完成。核心是 3 个能力:
- 代码化管道:工作流版本化、可测试、可评审,彻底告别散落在各台机器上的 crontab。
- 自动调度与重试:按你定的时间表触发;任务失败按
retries配置自动重跑,不用人盯。 - 可视化监控:Web UI 里每个任务的状态、日志、依赖关系一目了然,出问题 1 分钟定位。
- 丰富的生态扩展:官方 Provider 生态覆盖 Postgres、S3、Snowflake、GCP 等近百种服务,装个包就能接。
Airflow 3 架构:调度器、DAG 处理器、API 服务、触发器等组件各司其职
核心概念速览
理解 3 个词,你就读懂了 Airflow 80% 的文档:
- DAG(有向无环图):你工作流的"地图",一张 Python 文件,声明哪些任务要跑、谁依赖谁、什么时候跑。
- Task(任务/Operator):地图上的"工序单",是最小执行单元,比如跑一段 SQL、执行一条 shell 命令。
- Scheduler(调度器):车间主任,盯着地图和时间表,到点派工、失败重派,24 小时不下班。
上手实战:跑通第一个例子
环境准备与安装命令
只需 Python 3.10+ 环境(官方同时支持 3.10~3.14),两条命令装好:
# 指定 Airflow 的数据目录(默认 ~/airflow 也可省略) export AIRFLOW_HOME=~/airflow # 安装 Airflow 3 稳定版 pip install apache-airflow==3.3.0启动 standalone 模式
# 一条命令初始化数据库、建用户、拉起全部组件 airflow standalone然后写你的第一个 DAG,放到$AIRFLOW_HOME/dags/目录下即可,建议从仓库自带的 示例 DAG 抄起:
from airflow import DAG, task # TaskFlow API,最 Pythonic 的写法 from datetime import datetime @task def collect(): """收集用户行为数据""" print("正在拉取点击、浏览、购买数据...") @task def feature(): """特征工程""" print("生成用户画像与商品特征...") @task def train(): """训练推荐模型""" print("协同过滤模型训练完成,准确率达标,准备上线!") with DAG( dag_id="recommendation_pipeline", start_date=datetime(2024, 1, 1), schedule="@daily", # 每天自动跑一次 ) as dag: collect() >> feature() >> train() # >> 定义任务依赖顺序保存后回到浏览器访问 http://localhost:8080,DAG 列表里就能看到recommendation_pipeline,点进 Graph 视图,依赖关系和执行状态直接呈现出来🚀
Graph 视图:直观展示任务间依赖关系与实时执行状态
进阶玩法
动态任务生成:分区数量不定也不怕
上游表今天 8 个分区、明天 32 个分区?用 Task Mapping(任务映射)就能按数据动态生成任务:把列表参数传给@task,Airflow 会自动为每个元素派生一个并行任务实例,不用改 DAG 结构。
Backfill:历史数据一条命令补齐
管道逻辑修好后想重跑历史数据?UI 里点 Backfill,或者直接用命令行指定日期范围:
# 对指定 DAG 回填 2015-01-01 到 2015-01-02 的历史数据 airflow backfill create --dag-id recommendation_pipeline \ --from-date 2015-01-01 --to-date 2015-01-02Backfill 界面:为指定 DAG 选择日期范围批量回填
规模化与运维
从单兵作战到生产集群,有 2 条现成路线:
- 单机/容器:
airflow standalone适合开发;稍上规模就用官方 Docker 镜像(apache/airflow)+ Compose 或 Swarm,镜像配方见 docker-stack 文档。 - Kubernetes 集群:用官方 Helm Chart 一条命令拉起,生产环境可多实例部署 scheduler 避免单点故障,参考 chart 部署文档:
helm repo add apache-airflow https://airflow.apache.org helm install airflow apache-airflow/airflow分布式架构:组件分离部署,支持多团队共享同一套元数据库
避坑指南
- 3.x 的 Web UI 密码不在终端打印:
airflow standalone启动后,去$AIRFLOW_HOME/simple_auth_manager_passwords.json.generated里取自动生成的管理员密码。 - SQLite 别进生产:本地开发够用,生产环境请换 PostgreSQL 或 MySQL(官方明确建议)。
- pip 装出依赖冲突:Airflow 官方提供"已知可用"的 constraints 文件,安装时按你的 Airflow 与 Python 版本搭配使用,可复现性拉满。
- DAG 文件别干重活:它只负责声明结构、会被反复解析求值,数据加工请写进任务内部,保持文件轻量。
现在就去搭起你的第一条管道
Airflow 把"谁来盯、失败了怎么办、上次跑到哪"这些琐事全部收编进代码和界面,你只需要专注业务逻辑本身。现在就去跑airflow standalone,把第一个 DAG 挂上去吧💪
更多细节请查阅 Airflow 官方文档 与 tutorial 系列教程,开启你的数据工作流自动化之旅。
【免费下载链接】airflowApache Airflow - A platform to programmatically author, schedule, and monitor workflows项目地址: https://gitcode.com/GitHub_Trending/ai/airflow
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
