fig*_*uts 7 apache-spark pyspark
文档解释如下:
除非另有指定,否则在每个执行器中分配给 PySpark 的内存量(以 MiB 为单位)。如果设置,执行程序的 PySpark 内存将限制为此数量。如果未设置,Spark 将不会限制 Python 的内存使用,并且由应用程序来避免超出与其他非 JVM 进程共享的开销内存空间。当 PySpark 在 YARN 或 Kubernetes 中运行时,此内存将添加到执行器资源请求中。注意:该功能依赖于Python的
resource
模块;因此,行为和限制是遗传的。例如,Windows不支持资源限制,而macOS上实际资源不受限制。
还有其他两个配置选项。一个控制分配给每个执行器的内存量spark.executor.memory
,另一个控制执行器中的每个 python 进程在开始将内存溢出到磁盘之前可以使用的内存量。spark.python.worker.memory
有人可以解释一下配置的行为和使用是什么以及它与andspark.executor.pyspark.memory
有什么不同吗?spark.executor.memory
spark.python.worker.memory
小智 14
我稍微扩展了我的答案。请点击文章末尾的链接,它们非常有用,并且有一些图片可以帮助您了解 Spark 内存管理的整体情况。
\n我们应该深入研究 Spark 内存管理(mm)来弄清楚什么是 Spark.execution.pyspark.memory。
\n那么,首先spark mm有两大部分:
\nJVM内部的内存分为4部分:
\nJVM外部的内存分为2部分:
\n因此,参数spark.executor.memory(或--executor-memory for spar-submit)响应将在每个执行器的JVM堆内分配多少内存。该内存将分为:保留内存、用户内存、执行内存、存储内存。为了控制这种分裂,我们还需要 2 个参数:spark.memory.fraction 和 Spark.memory.storageFraction
\n根据火花文档:
\n\n\nSpark.memory.fraction负责用于执行和存储的堆的一部分;
\n
\n\n\n\nSpark.memory.storageFraction负责不受逐出影响的存储内存量,表示为由spark.memory.fraction 预留的区域大小的一部分。因此,如果不使用存储内存,执行内存可能会获取所有可用内存,反之亦然。此参数控制执行时可以在必要时逐出多少内存。
\n
最后,堆将通过以下方式进行分割:
\n您询问的下一个参数是spark.executor.pyspark.memory。它是外部进程内存的一部分,负责 python 守护进程能够使用多少内存。例如,Python 守护进程用于执行在 python 上编写的 UDF。
\n最后一个是spark.python.worker.memory。在这篇文章中,我找到了下一个解释:JVM 进程和 Python 进程通过py4J 桥 相互通信, 该桥在 JVM 和 Python 之间公开对象。因此,spark.python.worker.memory正在控制 py4J 在将对象溢出到磁盘之前可以占用多少内存来创建对象。
\n您可以在接下来的文章中了解更多有关 mm 的内容:
\n\n 归档时间: |
|
查看次数: |
3252 次 |
最近记录: |