【问题标题】:Airflow Memory Error: Task exited with return code -9气流内存错误:任务退出并返回代码 -9
【发布时间】:2020-08-29 06:14:12
【问题描述】:

根据这两个Link1Link2,由于内存不足问题,我的 Airflow DAG 运行返回错误INFO - Task exited with return code -9。我的 DAG 运行有 10 个任务/运算符,每个任务都很简单:

  1. 进行查询以获取我的一个 BigQuery 表,然后
  2. 将结果写入我的 Mongo 数据库中的集合。

10 个 BigQuery 表的大小从 1MB 到 400MB 不等,所有 10 个表的总大小约为 1GB。我的 docker 容器默认有 2GB 内存,我已将其增加到 4GB,但是我仍然从一些任务中收到此错误。我对此感到困惑,因为 4GB 应该是足够的内存。我也很担心,因为将来这些表可能会变大(单个表查询可能是1-2GB),我当时想避免这些return code -9错误。

我不太确定如何处理这个问题,因为 DAG 的重点是每天将数据从 BigQuery 传输到 Mongo,并且 DAG 任务的查询/内存中的数据必然相当大,基于关于桌子的大小。

【问题讨论】:

    标签: mongodb docker memory airflow


    【解决方案1】:

    如您所说,您收到的错误消息对应于内存不足问题。

    参考official documentation

    DAG 执行受 RAM 限制。每个任务执行从两个开始 气流流程:任务执行和监控。目前,每个节点 最多可以同时处理 6 个任务。可以消耗更多的内存, 取决于 DAG 的大小。

    任何 GKE 节点中的高内存压力都会导致 Kubernetes 调度程序从节点中驱逐 pod,以试图缓解这种压力。尽管 GKE 中运行着许多不同的 Airflow 组件,但大多数都不会使用太多内存,因此最常发生的情况是用户上传了资源密集型 DAG。 Airflow 工作人员运行这些 DAG,用完资源,然后被驱逐。

    您可以通过以下步骤进行检查:

    1. 在 Cloud Console 中,导航至 Kubernetes Engine -> Workloads

    2. 点击airflow-worker,在Managed pods下方查看

    3. 如果有显示 Evicted 的 pod,请单击每个被驱逐的 pod 并在窗口顶部查找 The node was low on resource: memory 消息。

    解决OOM问题的方法有哪些?

    • 使用比当前机器类型更大的机器类型创建新的 Cloud Composer 环境。
    • 确保 DAG 中的任务为idempotent,即同一个 DAG 运行多次的结果应该与运行一次的结果相同。
    • 通过设置任务的重试次数来配置task retries - 这样,当您的任务被调度程序获取-9'ed 时,它将转到up_for_retry 而不是failed

    此外,您还可以检查 CPU 的行为:

    1. 在 Cloud Console 中,导航至 Kubernetes Engine -> Clusters
    2. 在页面底部找到Node Pools,然后展开default-pool部分
    3. 点击Instance groups下列出的链接
    4. 切换到Monitoring 选项卡,您可以在其中找到CPU utilization

    理想情况下,GCE 实例不应始终运行超过 70% 的 CPU,否则 Composer 环境可能会在资源使用期间变得不稳定。

    希望以上信息对您有用。

    【讨论】:

    • 谢谢。我目前没有在 GKE 或 Cloud Composer 上运行 Airflow,只是在本地运行,但这仍然很有帮助。
    • 我假设您使用的是 Cloud Composer,因为您提到了 BigQuery。我很抱歉造成误解。但是解决OOM问题的可能方法的要点仍然适用于您的情况。我还建议您查看 Apache Airflow forum,在那里您可以找到有关 OOM 和 Stackoverflow thread 的讨论。不仅如此,我还建议您尝试使用 Cloud Composer。它有很多功能,可以让你省略这些问题
    【解决方案2】:

    我将对数据进行分块,以便在任何给定时间将更少的数据加载到任何 1 个任务中。我还不确定是否需要使用 GCS/S3 进行中间存储。

    【讨论】:

      猜你喜欢
      • 2020-04-29
      • 2020-09-12
      • 1970-01-01
      • 2021-05-06
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      相关资源
      最近更新 更多