【问题标题】:How can Airflow be used to actively control the DAGs given the RAM and CPU constraint给定 RAM 和 CPU 限制,如何使用 Airflow 主动控制 DAG
【发布时间】:2019-01-09 11:33:46
【问题描述】:

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

我知道当调度程序通过将以下字段 min_file_process_interval 和 scheduler_heartbeat_sec 的值更改为一分钟左右来完成其“更频繁地调度和挑选文件”的工作时减少负载的一种方法。虽然它减少了持续的 CPU 加息,但是当间隔过去时(即一分钟后),它突然回到启动期间吸收约 95% 的 CPU。你如何减少它呢?至少不会消耗超过 70% 的 CPU?

已编辑:

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

【问题讨论】:

  • 您也必须重置 dag 开始日期。基于开始日期和调度间隔的气流调度任务。这可能是突然偷看 CPU 的原因之一。
  • 重置是什么意思? Airflow 不应该根据开始日期和计划间隔来安排任务吗?另外,我只打开了一个 DAG(设置为“@once”)进行调度,仍然需要大量的 CPU @MJK

标签: python load airflow


【解决方案1】:

您可以使用一些技术来控制在气流上运行的进程数量。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    相关资源
    最近更新 更多