当前位置: 首页 > news >正文

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-02

Backfill 界面:为指定 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),仅供参考

http://www.cnnetsun.cn/news/4323851.html

相关文章:

  • 从零到生产:LibreChat 自托管部署避坑指南
  • MATLAB连杆机构运动学仿真:从曲柄滑块到多杆机构GIF动画
  • 基于MATLAB的手写数字识别系统:BP神经网络与GUI界面实现全解析
  • 用Claude Code打造AI员工:语音控制、屏幕接管与自动构建实战
  • 用LLM为Emacs的EWW浏览器装上AI阅读助手
  • 4台Mac跑671B大模型:exo 分布式AI集群本地推理指南
  • obsidian-skills 实战:5 个 Agent 技能让 AI 正确读写和检索 Obsidian 笔记
  • DBeaver 插件优化完整教程:3 步解决启动缓慢与卡顿,内存占用降低一半
  • 途虎养车数据分析岗笔试题解析:从SQL到业务案例的考察逻辑
  • 用友2018秋招Java笔试题复盘:基础、集合、JVM与多线程要点解析
  • C语言零基础入门:掌握printf和scanf的四个关键点
  • 双星不同轨卫星目标探测Matlab仿真源码详解
  • agentmemory远程部署安全加固指南:HMAC密钥、Bearer令牌与HTTPS强制三件套
  • 不确定性引导的潜在扩散模型:实现忠实图像超分辨率
  • Linux重定向与追加重定向详解:文件描述符、2>1与日志收集实战
  • AI Agent概念验证实战:从Demo到工程落地的关键路径
  • Python爬虫实战:从抓包到反爬的完整数据采集方案
  • HyperMesh新手的三大卡点:网格质量、材料单位与节点显示
  • 手写MiniPin:从自引用到async彻底理解Rust Pin
  • iOS校招笔试高频考点拆解:从内存管理到GCD底层原理
  • 后台开发校招笔试备考全攻略:从乐信真题看考点与策略
  • STM32N6链接报错undefined reference?一文教你排查MX_USART1_UART_Init缺失问题
  • 快手2020秋招算法岗B卷:KMP、动态规划与机器学习考点全解析
  • DeepSeek接入Codex:配置Skill与插件打造Agent编程工作流
  • Spring 声明式事务在同类中失效的原因与解决方案汇总
  • RV1126准备-----RockX的使用
  • 【Python 多行字符串与三引号】
  • 从C语言到机器码:掌握编译与反汇编的核心原理
  • OpenAI 应用快照指南:锁定模型版本,告别输出漂移
  • 安卓开发环境配置避坑指南