气流内存错误:任务退出,返回码为-9

时间:2020-05-13 06:50:01

标签: mongodb docker memory airflow

根据这两个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任务的内存中的查询/数据必然很大的表。

2 个答案:

答案 0 :(得分:1)

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

参考official documentation

DAG执行受RAM限制。每个任务执行从两个开始 气流过程:任务执行和监视。当前,每个节点 最多可以执行6个并发任务。可以消耗更多的内存, 取决于DAG的大小。

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

您可以按照以下步骤进行检查:

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

  2. 单击airflow-worker,然后在Managed pods下浏览

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

有哪些方法可以解决OOM问题?

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

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

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

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

我希望以上信息对您有用。

答案 1 :(得分:1)

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