【问题标题】:Airflow tasks get stuck at "queued" status and never gets running气流任务卡在“排队”状态并且永远不会运行
【发布时间】:2018-02-01 19:52:54
【问题描述】:

我正在使用 Airflow v1.8.1 并在 kubernetes 和 Docker 上运行所有组件(worker、web、flower、scheduler)。 我将 Celery Executor 与 Redis 一起使用,我的任务如下所示:

(start) -> (do_work_for_product1)
     ├  -> (do_work_for_product2)
     ├  -> (do_work_for_product3)
     ├  …

所以start 任务有多个下游。 我设置了并发相关配置如下:

parallelism = 3
dag_concurrency = 3
max_active_runs = 1

然后当我手动运行这个 DAG 时(不确定它是否永远不会发生在计划任务上),一些下游会被执行,但其他下游会停留在“排队”状态。

如果我从管理 UI 中清除任务,它就会被执行。 没有工作日志(在处理了一些第一个下游之后,它只是不输出任何日志)。

Web 服务器的日志(不确定 worker exiting 是否相关)

/usr/local/lib/python2.7/dist-packages/flask/exthook.py:71: ExtDeprecationWarning: Importing flask.ext.cache is deprecated, use flask_cache instead.
  .format(x=modname), ExtDeprecationWarning
[2017-08-24 04:20:56,496] [51] {models.py:168} INFO - Filling up the DagBag from /usr/local/airflow_dags
[2017-08-24 04:20:57 +0000] [27] [INFO] Handling signal: ttou
[2017-08-24 04:20:57 +0000] [37] [INFO] Worker exiting (pid: 37)

调度程序也没有错误日志。每当我尝试此操作时,许多卡住的任务都会发生变化。

因为我也使用 Docker,所以我想知道这是否相关: https://github.com/puckel/docker-airflow/issues/94 但到目前为止,没有任何线索。

有没有人遇到过类似的问题或知道我可以针对这个问题调查什么...?

【问题讨论】:

  • 嗨@Norio,我们遇到了与queue 中的任务类似的问题,但调度程序似乎忘记了其中一些。当我再次使用airflow scheduler 时,它们已被拾取。我也在使用 1.8.1、kubernetes 和 Docker,但是使用 LocalExecutor,这里也是同样的问题。
  • @Chengzhi 谢谢你的信息。我利用这个 shell github.com/apache/incubator-airflow/blob/… 自动重启调度程序而不依赖 k8s 的后退,所以在我的情况下调度程序应该定期重新生成,但不要永远选择一些任务......非常奇怪。
  • 超级,感谢分享,非常有条理,如果我发现了什么,我会让你保持循环,但看起来这是目前的解决方案。
  • 我在气流和使用 LocalExecutor 时遇到了类似的问题。我的设置与@Chengzhi 的设置相似。有人在这里找到什么可以尝试的吗?
  • 刚刚解决了我的案子,它看起来不像你的案子,但值得分享。我正在使用 logs/ 文件夹,但没有注意到文件夹的所有所有权都发生了变化。由于这个原因,Airflow 无法写入日志文件,并且任务一直卡在排队状态。将所有文件的所有权更改回airflow 用户使应用程序恢复正常。 sudo chown -R airflow:airflow logs/

标签: airflow apache-airflow airflow-scheduler


【解决方案1】:

任务卡住很可能是一个错误。目前(

这个patch 应该可以解决这个问题。

值得研究一下为什么您的任务没有进入 RUNNING 状态。将自己设置为这种状态是任务所做的第一件事。通常,工作人员在开始执行之前会记录日志,并且还会报告错误。您应该能够在 task 日志中找到此条目。

编辑:正如 cmets 在原始问题中提到的,如果气流无法运行任务的一个例子是它无法写入所需的位置。这使得它无法继续,任务会卡住。该补丁通过使调度程序中的任务失败来解决此问题。

【讨论】:

  • 我们看到这个问题,1.9.0 任务排队,但除非从 UI 手动完成,否则永远不会进入运行状态
【解决方案2】:

我一直在研究同一个 docker image puckel。我的问题已通过以下方式解决:

更换

 result_backend = db+postgresql://airflow:airflow@postgres/airflow

celery_result_backend = db+postgresql://airflow:airflow@postgres/airflow

我认为它在 puckel 的最新版本中得到了更新。更改已在 2018 年 2 月左右恢复,您的评论是在 1 月发表的。

【讨论】:

  • 我正在使用 puckel 图像,我想在容器上运行一些命令;例如airflow dag_state spark_python,但我遇到以下错误:airflow.exceptions.AirflowConfigException: error: cannot use sqlite with the CeleryExecutor,你知道为什么我不能运行
【解决方案3】:

请尝试airflow schedulerairflow worker 命令。

我认为airflow worker 调用每个任务,airflow scheduler 在两个任务之间调用。

【讨论】:

  • 这可能无法解决问题,但至少通过运行这些命令,您可以了解问题所在,例如它们是否出错
【解决方案4】:

我们有一个解决方案,想在 1.9 正式发布之前在这里分享。感谢 Bolke de Bruin 对 1.9 的更新。在我 1.9 之前的情况下,目前我们正在使用 1.8.1 运行另一个 DAG 以清除 queue state 中的任务,如果它在那里停留超过 30 分钟。

【讨论】:

  • 你有这个 DAG 的代码吗?我也有这个问题,需要一些时间才能迁移到更新版本的 Airflow。
【解决方案5】:

就我而言,所有 Airflow 任务都卡住了,而且没有一个正在运行。以下是我为修复它所做的步骤:

  1. 终止所有气流进程,使用$ kill -9 <pid>
  2. 杀死所有 celery 进程,使用$ pkill celery
  3. 气流.cfg 文件中 celery 的 worker_concurrencyparallelismdag_concurrency 配置的计数增加。
  4. 启动气流,首先检查气流网络服务器是否自动启动,在我的情况下,它正在通过 Gunicorn 运行,否则开始使用$ airflow webserver &
  5. 启动气流调度程序$ airflow scheduler
  6. 启动气流工作者$ airflow worker
  7. 尝试运行作业。

【讨论】:

    猜你喜欢
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    相关资源
    最近更新 更多