首页 文章

使用Spark和Yarn进行资源分配

提问于
浏览
1

我在纱线客户端模式下使用Zeppelin 0.7.3和Spark 2.3 . 我的设置是:

火花:

spark.driver.memory 4096m

spark.driver.memoryOverhead 3072m

spark.executor.memory 4096m

spark.executor.memoryOverhead 3072m

spark.executor.cores 3

spark.executor.instances 3

纱:

最小分配:内存:1024,vCores:2

最大分配:内存:9216,vCores:6

Zeppelin启动的应用程序获得以下资源:

运行容器4

分配的CPU VCores 4

分配的内存MB 22528

Yarn allocation

  • 我不太了解纱线分配的内存量 . 鉴于设置,我会假设纱线将保留(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时,我找到以下执行程序:

Spark allocation

在这里,执行程序确实每个都有3个核心 . 我怎么知道哪个值是正确的或者我错过了什么?

  • 我尝试了几个设置,在yarn-client模式下,我应该使用spark.yarn.am.memory或spark.yarn.am.cores等选项 . 然而,纱线似乎忽略了这些 . 为什么会这样?此外,在纱线客户模式下,驾驶员应该在纱线外运行 . 为什么资源仍在纱线中分配?我的Zeppelin与其中一名 Worker 在同一台机器上运行 .

1 回答

  • 1

    一个spark应用程序有三个角色:driver,application-master和executor .

    • 在客户端模式(部署模式之一)中,驱动程序本身不会询问来自yarn的资源,因此我们有一个应用程序主服务器,三个执行程序,其资源必须由YARN分配 . 所以我认为spark会要求(4G 3G)* 3为三个执行者,而1G为am . 所以 Allocated Memory 将由22GB(22528MB) .

    • 至于核心号码,我认为Spark UI会给出正确答案,因为我的经验 .

相关问题