根据这两个Link1和Link2,由于内存不足问题,我的Airflow DAG运行返回错误INFO - Task exited with return code -9
。我的DAG运行有10个任务/操作员,每个任务都很简单:
10个BigQuery表的大小从1MB到400MB不等,所有10个表的总大小约为1GB。我的Docker容器默认具有2GB的内存,我已将其增加到4GB,但是我仍然从一些任务中收到此错误。我对此感到困惑,因为4GB应该足够用于此目的。我也很担心,因为将来这些表可能会变大(单个表查询可能为1-2GB),并且我想避免这些return code -9
错误。
对此,任何想法或建议将不胜感激。我不确定如何处理此问题,因为DAG的目的是每天将数据从BigQuery传输到Mongo,并且基于大小,DAG任务的内存中的查询/数据必然很大的表。
答案 0 :(得分:1)
正如您所说,收到的错误消息与内存不足问题相对应。
DAG执行受RAM限制。每个任务执行从两个开始 气流过程:任务执行和监视。当前,每个节点 最多可以执行6个并发任务。可以消耗更多的内存, 取决于DAG的大小。
任何GKE节点中的高内存压力将导致Kubernetes调度程序从节点中逐出pod,以缓解这种压力。尽管GKE内运行着许多不同的Airflow组件,但大多数组件并不会占用太多内存,因此最常发生的情况是用户上载了资源密集型DAG。气流工作人员运行这些DAG,耗尽资源,然后将其驱逐出去。
您可以按照以下步骤进行检查:
在Cloud Console中,导航至Kubernetes Engine
-> Workloads
单击airflow-worker
,然后在Managed pods
下浏览
如果有显示Evicted
的窗格,请单击每个逐出的窗格,然后在窗口顶部查找The node was low on resource: memory
消息。
有哪些方法可以解决OOM问题?
-9'ed
时,它将转到up_for_retry
而不是failed
< / li>
此外,您还可以检查CPU的行为:
Kubernetes Engine
-> Clusters
Node Pools
,然后展开default-pool
部分Instance groups
下的链接Monitoring
标签,您可以在其中找到CPU utilization
理想情况下,GCE实例不应始终运行超过70%的CPU,否则Composer环境可能在资源使用期间变得不稳定。
我希望以上信息对您有用。
答案 1 :(得分:1)
我将对数据进行分块,以便在任何给定时间将较少的数据加载到任何1个任务中。我不确定是否需要使用GCS / S3进行中间存储。