首页/数据/数据工程与 ETL 速查/Airflow Operator 常用算子

Airflow Operator 常用算子

Operator 是 Airflow 里一个任务做什么的模板类:BashOperator 跑 shell、PythonOperator 调函数、SQL 类算子执行查询,各系统对接由 Provider 包提供的专用算子完成。

Operator 是什么

Operator 描述「一个任务具体做什么」,是 Airflow 里最基础的执行单元。BashOperator 跑 shell 命令、PythonOperator 调 Python 函数、各类 SQL 算子执行查询;对接具体系统(Spark、Hive、S3、Kubernetes 等)的算子由独立的 Provider 包提供,需要按需安装。理解这一点能解释很多「本地好好的、上线就找不到类」的问题。

基本信息

BashOperator执行 shell 命令
PythonOperator执行 Python 可调用对象
SQL 类算子按数据库 Provider 提供,如 PostgresOperator
Provider 包apache-airflow-providers-* 需单独安装
模板能力算子参数支持 Jinja 模板渲染
新式写法TaskFlow 的 @task 可作为多数简单算子的替代

两类算子示例

两类算子示例
from airflow.operators.bash import BashOperator
from airflow.operators.python import PythonOperator

BashOperator(task_id="sh", bash_command="hive -e 'select 1'")
PythonOperator(task_id="py", python_callable=lambda: print("ok"))
# SQL 算子来自对应 Provider,例如 PostgresOperator(sql="select 1")

典型使用场景

  • 调度既有脚本:把现成的 shell 脚本用 BashOperator 接进编排
  • 轻量处理:校验、通知、调用接口用 PythonOperator 或 @task 完成
  • 提交大数据任务:用 Spark、Hive 等 Provider 算子提交作业并等待结果
  • 跨系统流转:S3 到仓库、仓库到报表的 搬运由对应算子承担
  • 统一入口:所有任务都用同一种资源与重试策略,便于集中治理
  • 容器化执行:用容器类算子把任务打包成镜像运行,隔离依赖版本
  • 分支与合并:按条件选择不同分支算子,再汇合到后续任务

常用参数读法

参数作用注意
task_id任务标识改名等于新建任务,历史运行不继承
retries失败重试次数配合 retry_delay 才有意义
trigger_rule上游满足什么条件才触发默认 all_success,补数场景常改
pool / queue资源池与队列控制并发,避免打满集群
execution_timeout单次执行超时防止任务卡死长期占资源
算子参数支持 Jinja 模板:bash_command 里可用 {{ ds }}(逻辑日期)、{{ data_interval_start }} 等内置变量。
用 {{ ds }} 这类模板变量时要注意它取的是「逻辑日期」,补数时该值与实际自然日期不同,落表分区前先确认口径。
算子选型的原则是「能交给外部系统就别在调度里算」:重计算交给 Spark、数据库等专用算子提交,调度层只负责触发、等待与编排。

易错点

  • Provider 包没装就 import 算子会报 ModuleNotFoundError,整个 DAG 文件解析失败
  • bash_command 里的 Jinja 变量名写错不会报语法错误,只在运行时变成空字符串
  • 任务里写死集群与路径,换环境就要改代码,应该用连接与变量管理
  • retries 设得很大却没有重试延迟,失败瞬间反复重试把上游压力放大
  • 把长时间运行的任务放在调度 worker 上跑,占满槽位影响其他 DAG

数据来源与参考

  • Apache Airflow 官方文档:Operators
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌