问题描述
我有一个任务,需要100 GB的RAM才能成功完成。我在Composer环境中有3个节点,每个节点有50 GB内存。我有3个工作人员(每个节点上有1个工作人员)。这里的问题是,此任务仅在其中一个工作程序上运行(它可以使用的最大内存为50 GB),因此由于内存问题而失败。
是否有办法使此任务使用所有节点上的内存(150 GB)? (假设我们不能将任务分成较小的步骤)
此外,在云作曲家中,我们可以让一个工作人员跨越多个节点吗? (如果是这样,我可以强迫一名工作人员在所有三个节点上运行并使用150 GB内存)
解决方法
如果单个DAG的资源密集型足以耗尽整个Composer节点的资源,那么除非出现共同调度的工作人员,否则更多节点将无济于事。因此,可能的解决方案是使用比当前计算机类型更大的计算机类型创建一个新的Cloud Composer环境,请参考public documentation。
任何GKE节点中的高内存压力将导致Kubernetes调度程序从节点中逐出pod,以缓解这种压力。尽管GKE内运行着许多不同的Airflow组件,但大多数组件并不会占用太多内存,因此最常发生的情况是用户上载了资源密集型DAG。气流工作人员运行这些DAG,耗尽资源,然后将其驱逐出去。
您可以按照以下步骤进行检查:
- 在Cloud Console中,导航至
Kubernetes Engine
->Workloads
- 单击
airflow-worker
,然后在Managed pods
下查看 - 如果有显示
Evicted
的窗格,请单击每个逐出的窗格,然后在窗口顶部查找The node was low on resource: memory
消息。
如果小于128 GB,则可以使用各种运算符来启动Compute Engine,https://airflow.apache.org/docs/stable/howto/operator/gcp/compute.html