gpt4 book ai didi

python - 在 YARN 上运行的 Spark 如何计算 Python 内存使用量?

转载 作者:IT老高 更新时间:2023-10-28 20:42:04 28 4
gpt4 key购买 nike

阅读完文档后,我不明白在 YARN 上运行的 Spark 是如何计算 Python 内存消耗的。

它是否计入 spark.executor.memoryspark.executor.memoryOverhead 或在哪里?

特别是我有一个带有 spark.executor.memory=25Gspark.executor.cores=4 的 PySpark 应用程序,我经常遇到 Container 被杀死YARN 用于超出内存限制。 在 RDD 上运行 map 时出错。它在相当大量的复杂 Python 对象上运行,因此预计会占用一些非平凡的内存量,但不会占用 25GB。我应该如何配置不同的内存变量以用于繁重的 Python 代码?

最佳答案

我会尝试将内存增加到 spark.python.worker.memory 默认值 (512m),因为 Python 代码繁重,而此属性值 不会计入 spark.executor.memory

Amount of memory to use per python worker process during aggregation, in the same format as JVM memory strings (e.g. 512m, 2g). If the memory used during aggregation goes above this amount, it will spill the data into disks. link

Spark 中的 ExecutorMemoryOverhead 计算:

MEMORY_OVERHEAD_FRACTION = 0.10 
MEMORY_OVERHEAD_MINIMUM = 384
val executorMemoryOverhead =
max(MEMORY_OVERHEAD_FRACTION * ${spark.executor.memory}, MEMORY_OVERHEAD_MINIMUM))

YARN 和 Mesos 的属性是 spark.{yarn|mesos}.executor.memoryOverhead

YARN 杀死占用的内存超过其请求的进程,即 executorMemoryOverheadexecutorMemory 的总和。

In given image python processes in worker uses spark.python.worker.memory, then spark.yarn.executor.memoryOverhead + spark.executor.memory is specific JVM.

PySpark Internals Image credits

其他资源 Apache mailing thread

关于python - 在 YARN 上运行的 Spark 如何计算 Python 内存使用量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39878846/

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