gpt4 book ai didi

apache-spark - 了解 spark.yarn.executor.memoryOverhead

转载 作者:行者123 更新时间:2023-12-05 08:54:09 31 4
gpt4 key购买 nike

当我在 yarn 上运行 spark 应用程序时,驱动程序和执行程序内存设置为 --driver-memory 4G --executor-memory 2G

然后,当我运行该应用程序时,会抛出异常,提示 Container 因超出内存限制而被 YARN 杀死。使用了 2.5 GB 的 2.5 GB 物理内存。考虑提升 spark.yarn.executor.memoryOverhead。

这里的 2.5 GB 是什么意思? (开销内存、执行程序内存或开销+执行程序内存?)我这样问是因为当我将内存设置更改为:

--driver-memory 4G --executor-memory 4G --conf --driver-memory 4G --conf spark.yarn.executor.memoryOverhead=2048,然后异常消失。

我想问一下,虽然我把开销内存提升到2G了,但还是不到2.5G,为什么现在还能用呢?

最佳答案

让我们了解一下内存在spark中是如何在各个区域之间划分的。

  1. 执行器内存开销:

spark.yarn.executor.memoryOverhead = max(384 MB, .07 * spark.executor.memory)。在您的第一种情况下,memoryOverhead = max(384 MB, 0.07 * 2 GB) = max(384 MB, 143.36 MB) 因此,memoryOverhead = 384 MB 保留在每个假设您为每个执行者分配了一个核心。

  1. 执行和存储内存:

默认情况下 spark.memory.fraction = 0.6,这意味着作为一个统一区域的执行和存储占用剩余内存的 60%,即 998 MB。除非您启用 spark.memory.useLegacyMode,否则不会为每个区域分配严格的边界。否则它们共享移动边界。

  1. 用户内存:

Execution Memory 和 Storage Memory 分配后剩余的内存池,完全由您按自己喜欢的方式使用。你可以在那里存储你自己的数据结构,这些数据结构将在 RDD 转换中使用。例如,您可以通过使用 mapPartitions 转换维护哈希表来重写 Spark 聚合,以便该聚合运行。这包括 MemoryOverhead 之后剩余的 40% 内存。在您的情况下,它是 ~660 MB

如果您的工作没有满足上述任何分配,那么很可能会出现 OOM 问题。

关于apache-spark - 了解 spark.yarn.executor.memoryOverhead,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51237116/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com