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

Pra*_*ann 12 airflow airflow-scheduler

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

小智 16

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

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

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

[调度]

max_threads = 2

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

增加此配置可以减少任务之间的时间.

  1. 监视数据库以查看它是否存在任何瓶颈(Airflow用于管理和执行其进程的数据库):

最近我们遇到了同样的问题,但是任务之间的时间大约是10-15分钟,我们在AWS上使用PostgreSQL.实例没有很好地使用资源,~20 IOPS,20%的内存e~10%的CPU,但是que Airflow非常懒惰.在PgHero上查找性能之后,我们发现即使是在小型表上使用索引的查询花费的时间也超过一秒.所以我们增加数据库,Airflow作为火箭运行得很快:)

  1. Airflow花费时间加载Dags,运行命令:

气流list_dags -r

DagBag解析时间:7.9497220000000075

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

所有这些都帮助我们更快地运行Airflow,我真的建议你升级到1.9版本,这个版本上有很多性能问题已经修复

顺便说一句,我们在生产中使用Airflow master,使用LocalExecutor和PostgreSQL作为元数据数据库.

  • 我认为有些事情非常奇怪:运行回填时,任务之间需要 40 秒,尽管我有一个简单的 DagBag,需要 0.05 秒来解析。Airflow 这 40 秒在做什么?我的场景:我有一些快速的工作来下载历史汇率数据,每天创建一个文件。我想回填几年。该任务运行需要 4 秒。任务之间的 Airflow 需要 40 秒,因此顺序回填中的计算大部分都是浪费时间;应该需要几个小时,而不是几天!请注意,我不能使用任务并行性,否则我的 IP 将被阻止 (3认同)