0

我在 2015 年初配备 3.1 GHz Intel Core i7 处理器和 16GB 或 RAM 的 MacBook Pro 上运行具有 +400 个任务的 Airflow 进程。

我正在运行的脚本看起来很像这样,不同之处在于我将 DAG 定义为

default_args = {
  'start_date': datetime.now(),
  'max_active_runs': 2
}

尽量避免并行触发太多任务。以下是我做这件事的一系列截图。我的问题是:

  1. 此操作会生成大量 python 进程。是否有必要以这种方式在 RAM 中定义整个任务队列,或者气流可以采取“随手生成任务”的方法来避免启动这么多进程。
  2. 我认为max_active_runs控制在任何给定时间实际有多少进程正在工作。不过,回顾我的任务,我将有几十个任务占用 CPU 资源,而其余任务则处于空闲状态。这真是低效,我该如何控制这种行为?

以下是一些屏幕截图:

事情有了一个足够好的开始,并行运行的进程比我预期的要多得多: 在此处输入图像描述

一切都陷入困境,并且有很多空闲进程。事情似乎停止了: 在此处输入图像描述

终端开始吐出大量错误消息,并且有很多进程失败: 在此处输入图像描述

该过程基本上循环通过这些阶段,直到完成。最终的任务分解如下所示:

[2017-08-24 16:26:20,171] {jobs.py:2066} INFO - [backfill progress] | finished run 1 of 1 | tasks waiting: 0 | succeeded: 213 | kicked_off: 0 | failed: 200 | skipped: 0 | deadlocked: 0 | not ready: 0

有什么想法吗?

4

1 回答 1

1

max_active_runs定义了 Airflow 将为每个 DAG 安排多少次运行。根据您使用的执行器,执行器具有特定的容量。例如,对于最受欢迎的 LocalExecutor,这是由并行度设置的。这是 LocalExecutor 应该运行的并发任务数。如果你想限制并行运行的数量,你应该使用一个pool

于 2017-08-29T13:46:07.140 回答