Celery Executor模式下Airflow实现3组worker节点定向任务分配咨询
On-Prem Celery Executor 定向调度节点组配置方案
你当前使用的Celery Executor原生支持按任务指定目标执行节点范围的能力,可完全实现3组worker的定向调度,无需自定义调度逻辑。
核心实现逻辑
Celery Executor的调度基于队列路由机制,只需要给不同依赖环境的服务器绑定专属队列,再在DAG任务上指定对应队列,即可严格匹配任务到符合依赖的节点执行,替代原有SSH跳转的wrapper逻辑。
具体配置步骤
- 第一步:按业务环境划分3组专属Celery Worker队列
在对应依赖的服务器上启动Airflow worker时,显式绑定专属队列:- 无Spark依赖的非Spark服务器:启动命令添加
-q non_spark_queue - 预装Spark二进制的计算服务器:启动命令添加
-q spark_submit_queue - 预装GCP工具的专用服务器:启动命令添加
-q gcp_push_queue
- 注意:所有worker不要绑定默认的
celery队列,避免任务被误调度到无对应依赖的节点上。
- 无Spark依赖的非Spark服务器:启动命令添加
- 第二步:DAG任务绑定对应队列
每个Operator实例化时,直接通过queue参数指定对应队列名即可:- 非Spark逻辑任务使用的
PythonOperator:实例化时传queue="non_spark_queue" - PySpark提交任务使用的
SparkSubmitOperator:实例化时传queue="spark_submit_queue" - GCP推送任务使用的
SFTPToGCSOperator:实例化时传queue="gcp_push_queue"
- 简化配置:Airflow 2.0+ 支持在DAG定义时设置全局默认队列,特殊任务再覆盖队列参数,无需逐个任务重复编写队列配置。
- 非Spark逻辑任务使用的
替代SSH Wrapper的配套适配
- 非Spark任务:worker本身部署在目标服务器上,
PythonOperator直接本地执行业务逻辑即可,无需远程SSH跳转。 - Spark提交任务:worker部署在预装Spark的服务器上,
SparkSubmitOperator通过spark_binary参数指定本地Spark路径,直接提交作业,无需远程调用。 - GCS推送任务:worker部署在有GCP依赖的专用服务器上,
SFTPToGCSOperator配置好Spark节点生成文件的可达路径(共享存储/节点间文件同步路径)即可直接推送,无需多跳SSH。
扩展调度能力(可选)
如果后续需要更细粒度的单节点定向调度,还可以通过任务的executor_config参数配置Celery的专属hostname路由,指定任务只能在某一台具体的服务器上执行,当前3组节点的需求仅靠队列配置即可完全满足。
内容的提问来源于stack exchange,提问作者Rafa
相关产品推荐
相关产品推荐

