给定 RAM 和 CPU 约束,如何使用 Airflow 主动控制 DAG

How can Airflow be used to actively control the DAGs given the RAM and CPU constraint

通过尝试大量示例,我对 airflow 的编程功能非常熟悉。阻止我进一步挖掘的是它如何在不使 CPU 或 RAM 超载的情况下执行其工作,有没有办法控制负载,使其不会 运行 资源不足

我知道一种在调度程序完成其 'scheduling and picking out the files more often' 工作时减少负载的方法,方法是将以下字段 min_file_process_interval 和 scheduler_heartbeat_sec 的值更改为一分钟左右的间隔。虽然它减少了恒定的 CPU 加息,但是当间隔过去时(即,一分钟后),它突然回到吸取 ~95% 的 CPU 就像它在启动期间一样。如何你是否也减少它,使其至少不会消耗超过 CPU 的 70%?

已编辑:

此外,当 scheduler_heartbeat 间隔过去时,我看到我所有的 python 脚本再次执行。这是它的工作方式吗?我认为它会在间隔之后选择新的 DAG,否则不会做任何事情。

您可以使用一些技巧来控制气流中的进程数 运行。

  1. 使用Pools。您可以在 dag 设置中分配池,或者您可以将其添加到您的操作员,以便随机 dag 创建者隐藏该细节。
  2. 对于回填任务,我认为有一个参数 concurrencymax_active_runs 是在您初始化 DAG
  3. 时定义的
  4. 如果您正在使用 CeleryExecutor,请分发您的计算。您可以让 CeleryExecutor 在远程机器上执行。[我自己没有尝试过,但我听说过成功的案例。]

这些是我用过的。您必须明智地分配以控制 CPU 峰值和内存问题。