如何设置Apache Spark Executor内存

我如何增加可用于Apache火花执行器节点的内存?

我有一个适合加载到Apache Spark的2 GB文件。 我在一台机器上运行apache spark,所以驱动程序和执行程序在同一台机器上。 机器有8 GB的内存。

当我设置要caching在内存中的文件后,尝试统计文件的行,我得到这些错误:

2014-10-25 22:25:12 WARN CacheManager:71 - Not enough space to cache partition rdd_1_1 in memory! Free memory is 278099801 bytes. 

我查看了这里的文档,并在$SPARK_HOME/conf/spark-defaults.conf设置为4g

UI显示这个variables是在Spark环境中设置的。 你可以在这里find截图

但是当我去执行选项卡时 ,我单个执行程序的内存限制仍设置为265.4 MB。 我也仍然得到相同的错误。

我尝试了这里提到的各种各样的东西,但是我仍然得到错误,并且没有清楚的想法,我应该改变设置。

我正在从spark-shell交互式地运行我的代码

由于您在本地模式下运行Spark,因此您已经注意到,设置spark.executor.memory将不会产生任何影响。 原因在于Worker在您启动spark-shell时启动的驱动程序JVM进程中“生活”,并且默认使用的内存是512M 。 您可以通过将spark.driver.memory设置为更高的spark.driver.memory来增加该值,例如5g 。 你可以这样做:

  • 将其设置在属性文件中(默认为spark-defaults.conf)

     spark.driver.memory 5g 
  • 或者在运行时提供configuration设置

     $ ./bin/spark-shell --driver-memory 5g 

请注意,这不能通过在应用程序中设置来实现,因为到那时已经太晚了,这个过程已经开始了一些内存。

265.4 MB的原因是Spark 将spark.storage.memoryFraction * spark.storage.safetyFraction专用于存储内存总量,默认情况下它们是0.6和0.9。

 512 MB * 0.6 * 0.9 ~ 265.4 MB 

因此,请注意,RDD存储的驱动器内存不会全部可用。

但是当你开始在集群上运行这个时, spark.executor.memory设置将在计算专用于Spark内存caching的数量时被接pipe。

另外请注意,对于本地模式,您必须在启动jvm之前设置驱动程序的内存量:

 bin/spark-submit --driver-memory 2g --class your.class.here app.jar 

这将启动与2G的JVM,而不是默认的512M。
详情在这里 :

对于本地模式,你只有一个执行者,而这个执行者是你的驱动程序,所以你需要设置驱动程序的内存。 *也就是说,在本地模式下,在运行spark-submit的时候,JVM已经启动了默认的内存设置,所以在你的conf中设置“spark.driver.memory”实际上不会为你做任何事情。 相反,您需要运行spark-submit,如下所示

显然,这个问题从来不说在本地模式上运行,而不是在纱线上运行。 不知何故,我不能让spark-default.conf改变工作。 相反,我试了这个,它为我工作

 bin/spark-shell --master yarn --num-executors 6 --driver-memory 5g --executor-memory 7g 

(不能将执行器撞到8g,从纱线configuration上有一些限制。)

您可以使用以下示例构build命令

  spark-submit --jars /usr/share/java/postgresql-jdbc.jar --class com.examples.WordCount3 /home/vaquarkhan/spark-scala-maven-project-0.0.1-SNAPSHOT.jar --jar --num-executors 3 --driver-memory 10g **--executor-memory 10g** --executor-cores 1 --master local --deploy-mode client --name wordcount3 --conf "spark.app.id=wordcount" 

您需要增加驱动程序的内存。在Mac(即在本地主机上运行时),默认的驱动程序内存为1024M)。 默认情况下,380Mb被分配给执行者。

截图

随着[ – 驱动器内存2G ]的增加,执行器内存增加到〜950Mb。 在这里输入图像描述

在spark / conf目录下创build一个名为spark-env.sh的文件并添加这一行

 SPARK_EXECUTOR_MEMORY=2000m #memory size which you want to allocate for the executor