如何运行超过10万个任务的Airflow DAG?

4
我有一个Airflow DAG,其中任务数量超过100,000个。我只能运行最多1000个任务。超过这个数量后,调度程序会挂起,Web服务器无法呈现任务,并且UI界面非常缓慢。
我尝试增加“min_file_process_interval”和“processor_poll_interval”配置参数。
我将“num_duration”设置为3600,以便调度程序每小时重新启动一次。
我是否达到了Web服务器或调度程序的限制?总的来说,如何处理Airflow中大量的任务?任何配置设置等都将非常有帮助。
此外,在这种规模下,我应该使用SubDagOperator吗?请给予建议。
谢谢,
1个回答

1

我能够运行超过165,000个airflow任务!

但有一个问题。并不是所有的任务都在单个Airflow Dag中被调度和渲染。

当我尝试安排越来越多的任务时,我面临的问题是调度器和Web服务器的问题。随着越来越多的任务被安排,调度器和Web服务器的内存和CPU消耗急剧增加(这是显而易见的并且很合理)。到了一个节点无法处理它们的地步(调度器为16,000+任务使用了超过80GB内存)。

我将单个dag分成了两个dag。一个是leader / master,第二个是worker dag。

我有一个airflow变量,它说一次处理多少个任务(例如,num_tasks = 10,000)。由于我有超过165,000个任务,因此worker dag将以17批每次处理10k个任务。

leader dag所做的就是一遍又一遍地触发相同的worker dag,使用不同的10k任务集监视worker dag运行状态。第一个触发操作员触发第一组10k任务的worker dag,并等待直到worker dag完成。完成后,它会触发相同的worker dag以处理下一批10k任务,以此类推。

这样,工作dag就可以被重复使用,永远不需要安排超过X个num_tasks的任务。
关键是要确定您的Airflow设置可以处理的任务max_number。然后以领导者/工作者的方式启动dag,每次重复进行max_tasks,直到所有任务完成。
希望这对你有帮助。

你能分享一下你的调度配置吗? 它有多少个CPU?你的AIRFLOW__SCHEDULER__MAX_THREADS配置是什么? - yoni
另一个问题,你能够运行任何其他的DAG了吗?我发现超过100个任务的DAG会耗尽其他DAG的资源,即使使用绝对调度(不偏好已经运行的DAG)。 - Richard Rymer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接