使用Spark和Yarn进行资源分配

时间:2018-06-28 10:29:30

标签: apache-spark yarn apache-zeppelin

我在纱客户端模式下使用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

Yarn allocation

  1. 我不太了解纱线分配的内存量。给定设置, 我假设纱线将保留(4096 + 3072)* 4m = 28672m。但是,它看起来像 spark.executor.memoryOverhead选项将被忽略(我也尝试了spark.yarn.executor.memoryOverhead 无效)。因此,最少384m被分配为开销。作为最小分配 设置为1024m,我们最终得到(4096 + 3072)* 1m +(4096 + 1024)* 3m = 22528m,其中第一项是 驱动程序,第二项总结了执行者的记忆力。

  2. 为什么只分配了4个CPU VCore,即使我请求了更多且最小分配是 设置为2,我请求更多的内核?在查看Application Master时,我发现以下执行程序:

Spark allocation

在这里,执行者实际上每个人都有3个核心。我怎么知道哪个值是正确的或什么 我想念吗?

  1. 我尝试了一些设置,在yarn-client模式下,我应该使用诸如 spark.yarn.am.memory或spark.yarn.am.cores。但是,纱线似乎忽略了那些。 为什么会这样呢?此外,在yarn-client模式下,驱动程序应该在外部运行 纱。为什么仍在纱线内分配资源?我的齐柏林飞艇在同一台机器上运行 作为工人之一。

1 个答案:

答案 0 :(得分:1)

  

一个spark应用程序具有三个角色:驱动程序,应用程序主程序和执行程序。

  1. 在客户端模式(部署模式之一)中,驱动程序本身不会从yarn询问资源,因此我们只有一个应用程序主程序,三个执行程序,哪些资源必须由YARN分配。因此,我认为spark将要求三位执行者(4G + 3G)* 3,而am则要求1G。因此pickle.dumps(value)将减少22GB(22528MB)。

  2. 对于核心号码,我认为Spark UI给出了正确的答案,因为我的经验。