这似乎是一个非常简单的问题,但是我感到困惑,为什么我传递给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 可用的内存):
我清楚地了解到,并不是所有进程的16GB本地计算机内存都可用,但是有什么方法可以计算出运行Spark作业之前实际上分配了多少内存?这样做的原因最终是因为即使分配了很多GB,我仍然不断得到OutOfMemoryError
。
答案 0 :(得分:1)
请注意,堆内存与存储内存不同。如Memory Management Overview
中所述Spark中的内存使用情况大体上属于以下两类之一:执行和存储。
,只有一小部分统一内存用于存储(默认值为0.6)。
另外,看起来您使用的是开发local
模式,其中根本不使用执行程序内存。