2017-08-24 79 views
10

我正在使用Airflow v1.8.1并在kubernetes上运行所有组件(worker,web,flower,scheduler)& Docker。 我用芹菜执行人与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(不知道它永远不会在计划任务发生),一些下行流得到执行,但其他人停留在“排队”状态。

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

有没有人遇到类似的问题或有一些想法我可以调查这个问题......?

+0

嗨@Norio,我们遇到类似的问题,即'队列中的任务,但调度程序似乎忘记了其中的一些。当我再次使用'气流调度程序'时,它们已被拾取。我也使用1.8.1,kubernetes和Docker,但是与LocalExecutor一样,这里也是同样的问题。 – Chengzhi

+0

@程智感谢您的信息。我利用这个shell https://github.com/apache/incubator-airflow/blob/ff45d8f2218a8da9328161aa66d004c3db3b367e/airflow/bin/airflow_scheduler_autorestart。sh自动重新启动调度程序而不依赖于k8s的退出,所以在我的情况下,调度程序应该定期重新生成,但不会永远选择一些任务......非常奇怪。 –

+0

超级,感谢分享,非常有线,如果我发现了某些东西,我会保持循环,但看起来这是现在的解决方案。 – Chengzhi

回答

3

卡住的任务很可能是一个错误。目前(< = 1.9.0alpha1)它可能发生在任务甚至无法在(远程)工作人员上启动时发生。例如,在工作负载过重或缺少依赖关系的情况下会发生这种情况。

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

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

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

+0

我们看到此问题,1.9.0任务已排队,但从未运行除非通过UI手动完成 – l0n3r4ng3r

2

我们有一个解决方案,并希望在1.9成为官方前分享。感谢Bolke de Bruin在1.9上的更新。在我1.9之前的情况下,目前我们使用的1.8.1是让另一个DAG运行来清除queue state中的任务,如果它在此停留超过30分钟。