气流任务陷入“排队”状态,永远不会运行

时间:2017-08-24 04:33:27

标签: airflow apache-airflow airflow-scheduler

我正在使用Airflow v1.8.1并在kubernetes&amp ;;上运行所有组件(worker,web,flower,scheduler)。泊坞窗。 我使用Redis的Celery Executor,我的任务看起来像:

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

因此start任务有多个下游。 我设置了与并发相关的配置如下:

parallelism = 3
dag_concurrency = 3
max_active_runs = 1

然后当我手动运行此DAG(不确定它是否在计划任务中永远不会发生)时,某些下游会执行,但其他下游仍处于“排队”状态。

如果我从Admin 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 但到目前为止,没有任何线索。

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

5 个答案:

答案 0 :(得分:4)

任务陷入困境很可能是一个错误。此时(< = 1.9.0alpha1),当任务甚至无法启动(远程)工作时,可能会发生这种情况。例如,在工作负载过重或缺少依赖关系的情况下会发生这种情况。

patch应解决该问题。

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

编辑:正如原始问题的评论中所提到的,如果气流无法运行任务的一个示例是无法写入所需位置的情况。这使得它无法继续,任务将被卡住。修补程序通过调度程序中的任务失败来解决此问题。

答案 1 :(得分:2)

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

答案 2 :(得分: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月份发布的。

答案 3 :(得分:0)

请尝试使用airflow schedulerairflow worker命令。

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

答案 4 :(得分:0)

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

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