【问题标题】:Scheduler not queuing jobs调度程序不排队作业
【发布时间】:2017-12-02 22:27:32
【问题描述】:

我正在尝试在 Kubernetes 上测试 Airflow。 Scheduler、Worker、Queue 和 Webserver 都在不同的部署中,我使用 Celery Executor 来运行我的任务。

除了调度程序无法排队作业之外,一切都运行良好。当我从 Web UI 或 CLI 手动执行 Airflow 时,它能够正常运行我的任务,但我正在尝试测试调度程序以使其工作。

我的配置几乎和单台服务器上的一样:

sql_alchemy_conn = postgresql+psycopg2://username:password@localhost/db
broker_url = amqp://user:password@$RABBITMQ_SERVICE_HOST:5672/vhost
celery_result_backend = amqp://user:password@$RABBITMQ_SERVICE_HOST:5672/vhost

我相信通过这些配置,我应该能够使其运行,但由于某种原因,只有工作人员能够看到 DAG 及其状态,而不是调度程序,即使调度程序能够记录他们的心跳就好了。还有什么我应该调试或查看的吗?

【问题讨论】:

  • airflow 有几个已知的 celery 错误,执行器有一些错误...
  • @Liqiang 那你会推荐什么?我相信 Celery 是进行分布式任务执行的唯一方法
  • 是的,Celery 是 Python 语言中唯一强大且稳定的分布式任务执行,在我看来,我建议不要使用气流运行,而是使用 celery 本身。

标签: rabbitmq kubernetes airflow airflow-scheduler


【解决方案1】:

首先,您使用 postgres 作为气流数据库,不是吗?您是否为 postgres 部署 pod 和服务?如果是这种情况,您是否确认在您的配置文件中有:

sql_alchemy_conn = postgresql+psycopg2://username:password@serviceNamePostgres/db 

您可以使用此github。我在 3 周前使用它进行第一次测试,效果很好。 入口点对于验证 rabbitMq 和 Postgres 是否配置良好很有用。

【讨论】:

  • 是的,我一直在使用该图像(实际上是一个分叉的version,因为我正在尝试编写 Helm 图表)。一切正常,从某种意义上说,我可以看到 Postgres 数据库的心跳,但没有任何安排
  • 你确认你的 dags 没有暂停吗?他们在 UI 上的状态是什么?您是否尝试过在气流吊舱(kubectl exec ...)中手动运行 dag? (对不起,也许是愚蠢的问题)。
  • 如何验证我的 DAG 未暂停?我打开它们,调度程序正在发送心跳。它们在 UI 上的状态反映了我必须在 UI 上单独运行任务的时间,所以有些正在运行,有些已经完成。但我实际上并没有手动运行它们,所以感谢您的建议!
  • 尝试使用kubectl exec ... 手动运行任务,任务能够很好地分布在所有 CeleryWorkers 中,并且已正确记录。但是由于某种原因,调度程序不会自动将它们排队(必须使用airflow backfill ...),也不会记录 CeleryExecutor 接收任务,就像我在本地部署时看到的那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多