需要帮助在Airflow的配置和Celery Executor中设置BROKER_URL

时间:2019-02-15 04:56:58

标签: celery airflow

摘要

我第一次使用Apache-Airflow。我已经使Web服务器,SequentialExecutor和LocalExecutor正常工作,但是在将CeleryExecutor与Rabbitmq-server结合使用时遇到了问题。我目前有两个AWS EC2实例。

错误

总结:我的工作人员无法连接到调度程序节点上的Rabbitmq服务器。每当我在工作程序实例上运行airflow worker时,它都会给出:

- ** ---------- [config]
- ** ---------- .> app:         airflow.executors.celery_executor:0x7f53a8dce400
- ** ---------- .> transport:   amqp://guest:**@localhost:5672//
- ** ---------- .> results:     disabled://
- *** --- * --- .> concurrency: 16 (prefork)
-- ******* ----
--- ***** ----- [queues]
 -------------- .> default          exchange=default(direct) key=default


[2019-02-15 02:26:23,742: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused.

配置

我遵循了所有可以在网上找到的指示。两个实例具有相同的airflow.cfg文件,

[core]
executor = CeleryExecutor

[celery]
broker_url = pyamqp://username:password@hostname:port/virtual_host

和result_backend指向气流正在起作用的RDS上的同一MySQL数据库。

据我所知,无论如何,辅助节点始终尝试连接到本地Rabbitmq服务器,而完全忽略了我的airflow.cfg文件中的broker_url。

我尝试过的东西

我一直在研究源代码,并在celery/app/base.py中注意到,如果我错误地注销了它在创建连接时在_get_config()中获得的配置,则实际上在其中有两个值字典返回了。

BROKER_URL = None
broker_url = pyamqp://username:password@hostname:port/virtual_host

,所有连接逻辑似乎都指向BROKER_URL键。

我尝试在BROKER_URL中设置CELERY_BROKER_URLairflow.cfg,但是似乎不区分大小写,并且忽略后者。为了查看是否可行,我修改了_get_config()方法并入侵了:

s['BROKER_URL'] = s['broker_url']
return s

而且,正如我所期望的,一切都开始起作用。

我做错什么了吗?我确实宁愿不使用此技巧,但我不明白为什么它会忽略配置值。

谢谢!

0 个答案:

没有答案