气流调度程序很难安排后续任务

时间:2017-11-23 08:34:48

标签: airflow airflow-scheduler

当我尝试在Airflow 1.8.0中运行DAG时,我发现在完成前任任务和执行后续任务的时间之间需要花费很多时间(通常执行时间更长)个别任务)。 Sequential,Local和Celery Executors的场景也是如此。有没有办法减少提到的开销时间? (就像airflow.cfg中可以加速DAG执行的任何参数一样?) 甘特图已添加以供参考: Gantt chart

3 个答案:

答案 0 :(得分:12)

正如尼克所说,Airflow不是一个实时工具,任务是尽快安排和执行的。但是下一个任务将永远不会在最后一个任务之后立即运行。

如果你有超过100个DAG,每个任务约3个任务或有很多任务的Dag(~100或更多),你必须考虑3件事:

  1. 增加DagFileProcessorManager用于加载和执行Dags(airflow.cfg)的线程数:
  2.   

    [调度]

         

    max_threads = 2

    max_threads控制挑选和执行/终止的DAG数量:https://github.com/apache/incubator-airflow/blob/61ff29e578d1121ab4606fe122fb4e2db8f075b9/airflow/utils/dag_processing.py#L535

    增加此配置可以缩短任务之间的时间。

    1. 监控您的数据库以查看它是否有任何瓶颈(Airflow用来管理和执行其流程的数据库):
    2. 最近我们遇到了同样的问题,但是任务之间的时间大约是10-15分钟,我们在AWS上使用PostgreSQL。实例没有很好地使用资源,~20 IOPS,20%的内存e~10%的CPU,但是que Airflow非常懒惰。 在PgHero上查找性能后,我们发现即使是在小型表上使用索引的查询花费的时间也超过一秒。 所以我们增加了数据库,而Airflow作为火箭正在快速运行:)

      1. Airflow用于加载Dags的时间,运行命令:
      2.   

        airflow list_dags -r

             

        DagBag解析时间:7.9497220000000075

        如果DagBag解析时间高于~5分钟,则可能是个问题。

        所有这些都帮助我们更快地运行Airflow,我真的建议您升级到1.9版本,此版本上修复了许多性能问题

        顺便说一下,我们正在使用Airflow master进行生产,使用LocalExecutor和PostgreSQL作为元数据数据库。

答案 1 :(得分:2)

您的甘特图以秒为单位显示事物。气流并不意味着是实时调度引擎。它处理大约几分钟的事情。 如果您需要更快地运行,您可以考虑使用不同的气流计划工具。或者,您可以将所有工作放在一个任务中,这样您就不会受到调度程序延迟的影响。

答案 2 :(得分:0)

我必须修补dag填充代码,因为每个工人花了30秒钟以上填充dag袋。问题出在models.py detect_downstream_cycle代码上,这需要很长时间才能运行。在使用list_dags命令进行测试时,这是我的结果: