2

我正在使用气流 1.7.1.3。

我对并发 DAG / 任务有疑问。当一个 DAG 运行时,调度程序不再启动其他 DAG。调度程序似乎完全冻结(不再有日志)......直到正在运行的 DAG 完成。然后,新的 DAGrun 被触发。我的不同任务是长时间运行的 ECS 任务(~10 分钟)

我使用LocalExecutor并且我让默认配置大约parallelism=32dag_concurrency=16. 我自动使用airflow scheduler -n 20并重新启动它,并为我'depends_on_past': False的所有 DAG 声明进行设置。

有关信息,我在 ECS 集群中运行的容器中部署了气流。max_threads = 2我只有 2 个 CPU 可用。

有任何想法吗 ?谢谢

4

1 回答 1

2

我也遇到了这个问题,使用LocalExecutor. 这似乎是LocalExecutor工作方式的限制。调度程序最终生成子进程(在您的情况下为 32 个)。此外,您的调度程序每次执行执行 20 次迭代,因此当它运行 20 次时,它会等待其子进程终止,然后调度程序才能退出。如果有一个长时间运行的子进程,调度程序将在其执行时被阻塞。

对我们来说,决议是切换到CeleryExecutor. 当然,这需要 Celery 后端更多的基础设施、管理和整体复杂性。

于 2016-11-13T00:43:22.090 回答