「随笔」开源任务编排框架Airflow基础
痛点和目标
传统手动编排数据处理流程的痛点:
耗时耗力,效率低下
易出错,难以追踪
难以应对复杂性和拓展性
现代化编排工具的目标/优势:
自动化执行,减少人为干预
提高效率,增强可靠性
支持复杂工作流,易于拓展
核心概念
架构概述 — Airflow 文档 - Airflow 工作流管理平台
DAG(Directed Acyclic Graph)
定义数据工作流的结构
任务(Tasks)
工作流中的单个操作
操作符(Operators)
定义任务的类型和行为
依赖关系
TaskFlow
执行器
基本的工作单元
认证管理器
DAG
一种模型。可以指定任务之间的依赖关系,定义任务的执行顺序。描述任务要做什么:无论是获取数据、运行分析、触发其他系统等等。
DAG设计
需求收集
相关人员沟通:业务分析师、数据科学家、系统负责人
明确需求
数据来源、转换、消费
数据量、更新频率、延迟要求、数据质量
技术限制:基础设施、工具、现有系统
文档记录与定期回顾
操作符
BashOperator
PythonOperator
SqlOperator
HttpOperator
DockerOperator
执行器
调度器
核心职责:确定任务何时应该被调度执行
DAG解析:持续解析DAG目录中的DAG文件,寻找新的任务进行调度
心跳机制:调度器在一个循环中运行心跳,不断检查任务、调度任务、短暂休眠后再次检查
动态任务调度:根据任务依赖和状态动态
XComs
跨任务通信机制。
Airflow安全模型
Airflow 安全模型 — Airflow 文档 - Airflow 工作流管理平台
Airflow 安全模型涉及不同类型的用户,他们拥有不同的访问权限和功能。
部署管理员:负责airflow的安装、安全和配置
他们拥有最高级别的访问权限和控制权。他们负责安装和配置 Airflow,并就技术和权限做出决定。他们可以潜在地删除整个安装并访问所有凭据。部署管理员还可以决定在 Airflow 之外保留审计、备份和信息副本,这些不属于 Airflow 安全模型的范围。
已认证的UI用户:可以访问Airflow UI和API并与其交互的用户
DAG作者:负责创建DAG并将其提交到Airflow
他们可以创建、修改和删除 DAG 文件。DAG 文件中的代码在工作节点和 DAG 处理器中执行。因此,DAG 作者可以创建和更改在工作节点和 DAG 处理器上执行的代码,并可能访问 DAG 代码用于访问外部系统的凭据。DAG 作者对元数据数据库拥有完全访问权限。
未认证的UI用户
Airflow 默认不支持未经认证的用户
已认证UI用户的功能
不同角色具有不同的权限,角色权限的范围可以小至单个 DAG。
管理员用户
操作员用户
连接配置用户
审计日志用户
普通用户
查看者用户
DAG作者的功能
部署
部署方式
单机简单部署
这是最简单的 Airflow 部署,通常在单台机器上操作和管理。这种部署通常使用 LocalExecutor,其中调度器和工作进程在同一个 Python 进程中,并且调度器直接从本地文件系统读取DAG 文件。Web 服务器与调度器在同一台机器上运行。没有触发器组件,这意味着无法进行任务延迟。
分布式Airflow架构
Airflow 的组件分布在多台机器上,并引入了各种用户角色——部署管理器、DAG 作者、运维用户。在分布式部署的情况下,考虑组件的安全性方面非常重要。Web 服务器无法直接访问DAG 文件。UI 中“代码”选项卡中的代码是从元数据数据库中读取的。Web 服务器无法执行由DAG 作者提交的任何代码。它只能执行由部署管理器安装为已安装软件包或插件的代码。运维用户只能访问 UI,并且只能触发 DAGs 和任务,但不能编写 DAGs。
DAG处理分离架构
允许将调度器与访问DAG 文件分开
……
单机部署
在Pyhon环境中安装airflow
选择1:从pip安装
pip install "apache-airflow[celery]==3.0.0" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-3.0.0/constraints-3.9.txt"
注:使用科大源和清华源可能在安装google-re2时失败(由于速率限制403),使用阿里源可避免该问题。
选择2: 在Docker中运行Airflow
在 Docker 中运行 Airflow — Airflow 文档 - Airflow 工作流管理平台
初始化配置文件
docker compose run airflow-cli airflow config list
初始化数据库
docker compose -f docker/docker-compose.yaml up airflow-init
后台启动
docker compose up -d
注:如果不先运行初始化命令,而直接试图通过docker compose启动所有服务,apiserver可能由于无法获取配置文件中的关键变量而无法启动。
常见错误:Error response from daemon: Head “https://registry-1.docker.io/v2/library/postgres/manifests/13": EOF
主要是网络代理原因。
Safari打开webserver目前存在bug,会出现401循环刷页面现象
……
通过检查是否可正常打开UI界面确定安装是否完成。
设置数据库
参考:设置数据库后端 — Airflow 文档 - Airflow 工作流管理平台
测试数据库是否ready
分布式集群搭建
大数据调度平台Airflow(八):Airflow分布式集群搭建及测试_airflow集群部署-CSDN博客
更多问题
如何编写、管理DAG文件
权限、内容隔离
不同dag可能具有不同甚至不适配的依赖环境
跨平台执行
如Mac上部署Airflow docker(linux基础镜像)场景
https://medium.com/@sumitmudliar/beginners-guide-to-apache-airflow-4827c3f4bfe4
Apache Airflow 3 正式发布,开源分布式工作流平台 - OSCHINA - 中文开源技术交流社区
基于大数据的舆情分析系统架构(架构篇)_大数据_宇珩_InfoQ精选文章