为什么火花流从kafka接收数据比<executormemory * =“”executorcount =“”+ =“”drivermemory =“”>使用更多的内存?

时间:2015-07-14 09:26:14

标签: apache-spark spark-streaming

我使用客户端模式向具有客户端模式的YARN群集提交了Spark Streaming应用程序,如下所示:

./spark-submit \
--jars $JARS \
--class $APPCLS \
--master yarn-client \
--driver-memory 64m \
--executor-memory 64m \
--conf spark.shuffle.service.enabled=false \
--conf spark.dynamicAllocation.enabled=false  \
--num-executors 6 \
/data/apps/app.jar 

executorMemory * executorCount + driverMemory = 64m * 6 + 64m = 448m

但该应用程序实际上使用了 3968mb 。为什么会发生这种情况?如何减少内存使用?

1 个答案:

答案 0 :(得分:2)

Spark配置参数spark.yarn.executor.memoryOverheadspark.yarn.driver.memoryOverhead在您的情况下默认为384 MB(docs)。

然后有一个事实是YARN具有内存分配粒度(yarn.scheduler.increment-allocation-mb),默认为512 MB。所以一切都被四舍五入到了它的倍数。

此外,还有一个默认为1 GB的最小分配大小(yarn.scheduler.minimum-allocation-mb)。它在你的情况下设置得较低,或者你没有正确查看内存分配。

与内存使用相比,所有这些开销都应该可以忽略不计。您应该将--executor-memory设置为20 GB或更多。你为什么要配置一个可笑的低内存量?