Spark客户端模式-纱线为驱动程序分配容器? [英] Spark client mode - YARN allocates a container for driver?

查看:15
本文介绍了Spark客户端模式-纱线为驱动程序分配容器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在客户端模式下对Sink运行Spark,因此我预计Sink将只为Executor分配容器。然而,从我所看到的情况来看,似乎还为驱动程序分配了一个容器,而我没有得到我预期的那么多执行器。

我在主节点上运行Spark Submit。参数如下:

sudo spark-submit --class ... 
    --conf spark.master=yarn 
    --conf spark.submit.deployMode=client 
    --conf spark.yarn.am.cores=2 
    --conf spark.yarn.am.memory=8G  
    --conf spark.executor.instances=5 
    --conf spark.executor.cores=3 
    --conf spark.executor.memory=10G 
    --conf spark.dynamicAllocation.enabled=false 
在运行此应用程序时,Spark UI的Executors页面显示1个驱动程序和4个Executor(总共5个条目)。我预计会有5个,而不是4个遗嘱执行人。 与此同时,Spare UI的Nodes选项卡显示了实际上并未使用的节点(至少根据Spark UI的Executors页面...)分配了一个容器,使用9 GB的内存。其余节点上运行着容器,每个容器有11 GB的内存。

因为在我的Spark提交中,驱动程序的内存比Executor少2 GB,所以我认为Year分配的9 GB容器是给驱动程序使用的。

为什么要分配这个额外的容器?我如何防止这种情况?

Spark UI:

纱线界面:


伊戈尔·德沃扎克接听后更新

我错误地假设AM将在主节点上运行,并且它将包含驱动程序应用程序(因此设置stark.ya n.am.*设置将与驱动程序进程相关)。

所以我做了以下更改:

  • spark.yarn.am.*设置为默认值(512M内存,1核)
  • 通过spark.driver.memory将驱动程序内存设置为8G
  • 根本没有尝试设置驱动程序核心,因为它只对群集模式有效
因为默认设置下的AM占用512M+384M的开销,所以它的容器可以容纳在工作节点上剩余的1 GB空闲内存中。 Spark获得了它请求的5个执行器,并且驱动程序内存适合8G设置。现在全部按预期工作。

Spark UI:

纱线界面:

推荐答案

YARN application master分配了额外的容器:

在客户端模式下,驱动程序在客户端进程中运行,应用程序主程序仅用于向YAY请求资源。

即使在客户端模式下,驱动程序在客户端进程中运行,纱线应用程序主机仍在纱线上运行,并且需要容器分配。

无法阻止为纱线应用程序主机分配容器。

供参考,类似于上次提出的问题:Resource Allocation with Spark and Yarn

这篇关于Spark客户端模式-纱线为驱动程序分配容器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆