我正在使用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 但到目前为止,没有任何线索。
有没有人遇到过类似的问题,或者知道我可以针对这个问题调查一下......?
答案 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 scheduler
,airflow worker
命令。
我认为airflow worker
调用每个任务,airflow scheduler
调用两个任务之间。
答案 4 :(得分:0)
就我而言,所有 Airflow 任务都卡住了,并且没有一个正在运行。以下是我为修复它所做的步骤:
$ kill -9 <pid>
$ pkill celery
worker_concurrency
、parallelism
、dag_concurrency
配置的计数。$ airflow webserver &
$ airflow scheduler
$ airflow worker