当我尝试在Airflow 1.8.0中运行DAG时,我发现完成前置任务和选择后继任务执行之间需要很长时间(通常大于单个任务的执行时间)。对于Sequential、Local和Celery Executors来说情况也是如此。是否有办法减少以上提到的开销时间?(比如airflow.cfg中的任何参数可以加速DAG的执行吗?)参考甘特图如下:
![Gantt chart](https://istack.dev59.com/MCE9d.webp)
当我尝试在Airflow 1.8.0中运行DAG时,我发现完成前置任务和选择后继任务执行之间需要很长时间(通常大于单个任务的执行时间)。对于Sequential、Local和Celery Executors来说情况也是如此。是否有办法减少以上提到的开销时间?(比如airflow.cfg中的任何参数可以加速DAG的执行吗?)参考甘特图如下:
正如Nick所说,Airflow并不是实时工具。任务被安排并尽快执行,但下一个任务永远不会立即在上一个任务之后运行。
当您有100个以上的DAG,每个DAG中有3个任务或者有许多任务的DAG(100个或更多)时,您必须考虑以下三件事:
[scheduler]
max_threads = 2
max_threads控制选择和执行/终止的DAG数量(在这里查看)。增加此配置可以减少任务之间的时间。
最近,我们也遇到了同样的问题。任务之间的时间大约是10-15分钟,我们正在使用AWS上的PostgreSQL。
实例没有很好地利用资源; ~20 IOPS、20%的内存和~10%的CPU,但Airflow非常慢。
在使用PgHero查看数据库性能后,我们发现即使在小表上使用索引的查询也需要超过一秒钟。
因此,我们增加了数据库大小,现在Airflow像火箭一样快。 :)
airflow list_dags -r
DagBag parsing time: 7.9497220000000075
如果DagBag解析时间超过~5分钟,则可能存在问题。
所有这些都帮助我们更快地运行Airflow。我强烈建议您升级到1.9版本,因为该版本修复了许多性能问题。
顺便说一句,我们在生产中使用Airflow主节点,使用LocalExecutor和PostgreSQL作为元数据数据库。
您的甘特图以秒为单位显示事情。Airflow不是旨在成为实时调度引擎。它处理的是以分钟为单位的事情。 如果您需要运行速度更快的工具,可以考虑使用与Airflow不同的调度工具。或者,您可以将所有工作放入单个任务中,这样您就不会遭受调度程序延迟的影响。
scheduler_heartbeat_sec
是多少?也许你可以尝试减少它。 - ChengzhiLocalExecutor
时,任务之间的时间大致对应于“min_file_process_interval”设置中的秒数。也许可以尝试缩短该设置? - Marco