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、数据库等专用算子提交,调度层只负责触发、等待与编排。