Airflow 1.9.0正在排队,但未启动任务

Airflow 1.9.0正在排队,但未启动任务,airflow,airflow-scheduler,Airflow,Airflow Scheduler,气流随机不运行排队任务有些任务甚至不获取排队状态。我一直在调度程序日志中看到下面的内容 [2018-02-28 02:24:58,780] {jobs.py:1077} INFO - No tasks to consider for execution. 我确实看到数据库中的任务没有状态或排队状态,但它们从未开始 气流设置在ECS上运行,带有Redis。有4个调度程序线程和4个芹菜工人任务。对于未运行的任务,当鼠标悬停在任务图标上方时,将以队列状态(灰色图标)显示,运算符为null,任务详细

气流随机不运行排队任务有些任务甚至不获取排队状态。我一直在调度程序日志中看到下面的内容

 [2018-02-28 02:24:58,780] {jobs.py:1077} INFO - No tasks to consider for execution.
我确实看到数据库中的任务没有状态或排队状态,但它们从未开始

气流设置在ECS上运行,带有Redis。有4个调度程序线程和4个芹菜工人任务。对于未运行的任务,当鼠标悬停在任务图标上方时,将以队列状态(灰色图标)显示,运算符为null,任务详细信息显示:

    All dependencies are met but the task instance is not running. In most cases this just means that the task will probably be scheduled soon unless:- The scheduler is down or under heavy load
调度程序上的指标不显示重载。dag非常简单,只有两个独立的任务依赖于最后一次运行。同一dag中还有一些任务没有状态(白色图标)


有趣的是,当我重新启动调度程序时,任务会变为运行状态。

设置气流可能有点棘手

  • 您是否运行了
    气流调度程序
  • 您是否运行了
    airflow Web服务器
  • 是否已检查要运行的所有DAG在web ui中是否设置为打开
  • 是否所有要运行的DAG都有一个过去的开始日期
  • 是否所有要运行的DAG都有一个在web ui中显示的正确计划
  • 如果没有其他功能,您可以使用web ui单击dag,然后单击图形视图。现在选择第一个任务并单击任务实例。在“任务实例详细信息”一段中,您将看到DAG等待或不运行的原因
例如,我有一个DAG被错误地设置为
depends\u on\u past:True
,它禁止当前实例正确启动


文档中还有一个很好的资源,还有一些提示:。

我也在运行puckel/docker airflow repo的分支,主要在airflow 1.8上运行了大约一年,有1000多万个任务实例。我认为问题仍然存在于1.9版本中,但我并不乐观

无论出于何种原因,气流调度器似乎存在一个长期存在的问题,即性能会随着时间的推移而下降。我已经回顾了调度程序代码,但是我仍然不清楚在一个新的开始中到底发生了什么不同的事情,以便将其重新正常地安排。一个主要的区别是,计划任务状态和排队任务状态是重建的

在Airflow中,wiki提供了有关调度器如何工作及其各种状态的简明参考

大多数人通过定期重新启动调度器来解决调度器吞吐量下降的问题。我个人发现每隔1小时就成功一次,但也经常看到每隔5-10分钟成功一次。在尝试重新启动间隔时,您的任务量、任务持续时间和并行度设置值得考虑

有关更多信息,请参阅:


  • (部分“应经常重新启动计划程序”)
  • (部分“部署DAG更改时重新启动一切”。)
虽然该设置来自默认的systemd脚本,但以前可以通过使用重新启动每X次运行来解决此问题

<>你也可以考虑发布。我知道这已经讨论过几次了,其中一个核心贡献者可能能够提供额外的上下文

相关问题

  • (特别是在这里可以看到博尔克的回答)

需要检查的另一件事是“是否已达到DAG的并发参数?”

当一些任务显示为无状态时,我也经历过同样的情况

事实证明,我的文件传感器任务是在超时设置为1周的情况下运行的,而DAG超时仅为5小时。这导致了当文件丢失时,许多传感器同时运行。这会导致并发性过载

在传感器任务成功之前,无法启动相关任务,当dag超时时,它们将获得无状态

我的解决方案:

  • 仔细设置任务和DAG超时
  • 在airflow\u主文件夹的airflow.cfg文件中增加dag\u并发性
请参考文件。

我也有类似的问题,但它主要与subdag Operator有关,总共有3000多个任务实例(30个任务*44个subdag任务)

我发现,
airflow scheduler
主要负责将计划的任务放入“排队的插槽”(池),而
airflow芹菜工人则负责拾取排队的任务并将其放入“使用的插槽”(池)并运行它


根据您的描述,您的
计划程序应该可以正常工作。我建议你检查你的“芹菜工人”日志,看看是否有任何错误,或重新启动它,看看是否有帮助。我遇到一些问题,芹菜工人通常会罢工几分钟,然后重新开始工作(特别是在Subdag Operator上)

我今天面对这个问题,发现下面回答的要点4解决了这个问题

*'Do all the DAGs you want to run have a start date which is in the past?'*

我使用的是airflow v1.10.3版

我的问题更进一步,除了我的任务正在排队之外,我在Flower UI上看不到任何芹菜工人。解决方案是,因为我以root用户身份运行芹菜工人,所以我必须在~/.bashrc文件中进行更改

以下步骤使其工作正常:

  • 将export C_FORCE_ROOT=true添加到~/.bashrc文件中
  • source~/.bashrc
  • 运行worker:nohup气流工作者$*>~/afflow/logs/worker.logs&

  • 请在http://{HOST}:5555查看您的Flower UI,我认为芹菜4.2.1版和redis 3.0.1版存在以下问题:

    我们通过降级redis 2.10.6版解决了这个问题:


    redis==2.10.6

    我认为值得一提的是,存在一个可能导致任务无法运行的未决问题
    ps -ef | grep airflow       #show the process id
    kill 1234                   #kill the webserver
    kill 5678                   #kill the scheduler
    
    airflow-scheduler.err
    airflow-scheduler.pid
    airflow-webserver.err
    airflow-webserver.pid
    
    airflow webserver -D
    airflow scheduler -D
    
    foo = DummyOperator(
        task_id='foo',
        dag=dag,
        pool='capser'
    )
    
    Task is in the 'None' state which is not a valid state for execution. The task must be cleared in order to be run.
    
    DAG(dag_id='your-dag', is_paused_upon_creation=True)
    
    
    dags_are_paused_at_creation = FALSE
    
    AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION=False