为什么分配给Spark驱动程序/执行程序的内存量与我从spark-submit传递的内存量不同?

时间:2018-07-26 16:34:33

标签: apache-spark pyspark

这似乎是一个非常简单的问题,但是我感到困惑,为什么我传递给spark-submit作业的内存量与Spark实际使用的内存量之间不匹配。例如,在我的本地计算机(运行MacOS且内存为16GB的MacBook Pro)上,我将以下内容传递给了我的参数:

spark-submit --driver-memory 12G --executor-memory 12G my_spark_script.py

但是,当我在http://localhost:4040/executors/上查看我的SparkUI时,会看到以下内容(请注意,只有 6.7GB 可用的内存): enter image description here 我清楚地了解到,并不是所有进程的16GB本地计算机内存都可用,但是有什么方法可以计算出运行Spark作业之前实际上分配了多少内存?这样做的原因最终是因为即使分配了很多GB,我仍然不断得到OutOfMemoryError

1 个答案:

答案 0 :(得分:1)

请注意,堆内存与存储内存不同。如Memory Management Overview

中所述
  

Spark中的内存使用情况大体上属于以下两类之一:执行和存储。

,只有一小部分统一内存用于存储(默认值为0.6)。

另外,看起来您使用的是开发local模式,其中根本不使用执行程序内存。