我在纱客户端模式下使用Zeppelin 0.7.3和Spark 2.3。 我的设置是:
火花:
spark.driver.memory 4096m
spark.driver.memory开销3072m
spark.executor。内存4096m
spark.executor.memory开销3072m
spark.executor.cores 3
spark.executor.instances 3
纱线:
最小分配:内存:1024,vCores:2
最大分配:内存:9216,vCores:6
由Zeppelin启动的应用程序获得以下资源:
正在运行的容器4
已分配的CPU VCores 4
已分配内存MB 22528
我不太了解纱线分配的内存量。给定设置, 我假设纱线将保留(4096 + 3072)* 4m = 28672m。但是,它看起来像 spark.executor.memoryOverhead选项将被忽略(我也尝试了spark.yarn.executor.memoryOverhead 无效)。因此,最少384m被分配为开销。作为最小分配 设置为1024m,我们最终得到(4096 + 3072)* 1m +(4096 + 1024)* 3m = 22528m,其中第一项是 驱动程序,第二项总结了执行者的记忆力。
为什么只分配了4个CPU VCore,即使我请求了更多且最小分配是 设置为2,我请求更多的内核?在查看Application Master时,我发现以下执行程序:
在这里,执行者实际上每个人都有3个核心。我怎么知道哪个值是正确的或什么 我想念吗?
答案 0 :(得分:1)
一个spark应用程序具有三个角色:驱动程序,应用程序主程序和执行程序。
在客户端模式(部署模式之一)中,驱动程序本身不会从yarn询问资源,因此我们只有一个应用程序主程序,三个执行程序,哪些资源必须由YARN分配。因此,我认为spark将要求三位执行者(4G + 3G)* 3,而am则要求1G。因此pickle.dumps(value)
将减少22GB(22528MB)。
对于核心号码,我认为Spark UI给出了正确的答案,因为我的经验。