我在纱线客户端模式下使用 Zeppelin 0.7.3 和 Spark 2.3。
我的设置是:
Spark:
spark.driver.memory 4096m
spark.driver.memoryOverhead 3072m
spark.executor.memory 4096m
spark.executor.memoryOverhead 3072m
spark.executor.cores 3
spark.executor.instances 3
Yarn:
Minimum allocation: memory:1024, vCores:2
Maximum allocation: memory:9216, vCores:6
The application started by Zeppelin gets the following resources:
Running Containers 4
Allocated CPU VCores 4
Allocated Memory MB 22528
我不太明白yarn分配的内存量。鉴于设置,
我假设纱线会保留 (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 个核心。我如何知道哪个值是正确的值或什么值
我失踪了吗?
- 我尝试了一些设置,在纱线客户端模式下我应该使用诸如
Spark.yarn.am.memory 或 Spark.yarn.am.cores。然而,这些似乎被纱线忽略了。
为什么会这样呢?此外,在yarn-client模式下,驱动程序应该在外部运行
纱线。为什么资源仍然在yarn内部分配?我的 Zeppelin 在同一台机器上运行
作为工人之一。
一个 Spark 应用程序具有三种角色:驱动程序、应用程序主机和执行程序。
在客户端模式(部署模式之一)下,驱动程序本身不会向yarn请求资源,因此我们有1个application-master,3个executor,这些资源必须由YARN分配。所以我认为spark会为三个executor要求(4G + 3G) * 3,为am要求1G。所以Allocated Memory
将增加 22GB(22528MB)。
至于核心数,我认为 Spark UI 根据我的经验给出了正确的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)