如何为apache spark worker更改每个节点的内存

时间:2014-06-16 10:53:47

标签: memory cluster-computing config apache-spark

我正在配置Apache Spark群集。

当我运行具有1个主服务器和3个从服务器的集群时,我在主监视器页面上看到了这一点:

Memory
2.0 GB (512.0 MB Used)
2.0 GB (512.0 MB Used)
6.0 GB (512.0 MB Used)

我想增加工作人员的已用内存,但我找不到合适的配置。我更改了 spark-env.sh ,如下所示:

export SPARK_WORKER_MEMORY=6g
export SPARK_MEM=6g
export SPARK_DAEMON_MEMORY=6g
export SPARK_JAVA_OPTS="-Dspark.executor.memory=6g"
export JAVA_OPTS="-Xms6G -Xmx6G"

但是用过的内存仍然是一样的。我该怎么做才能改变用过的内存?

5 个答案:

答案 0 :(得分:16)

使用1.0.0+并使用spark-shell或spark-submit时,请使用--executor-memory选项。 E.g。

spark-shell --executor-memory 8G ...

0.9.0及以下:

当您启动作业或启动shell时更改内存。我们必须修改spark-shell脚本,以便它通过作为底层java应用程序的参数来携带命令行参数。特别是:

OPTIONS="$@"
...
$FWDIR/bin/spark-class $OPTIONS org.apache.spark.repl.Main "$@"

然后我们可以按如下方式运行我们的spark shell:

spark-shell -Dspark.executor.memory=6g

在为独立jar配置它时,我在创建spark上下文之前以编程方式设置系统属性,并将值作为命令行参数传递(我可以使它比长卷绕系统道具更短)。

System.setProperty("spark.executor.memory", valueFromCommandLine)

至于更改默认群集范围,抱歉,不完全确定如何正确执行。

最后一点 - 我有点担心你有2个节点2GB和一个6GB节点。您可以使用的内存将限制为最小的节点 - 所以此处为2GB。

答案 1 :(得分:13)

在Spark 1.1.1中,设置工作人员的最大内存。 在conf / spark.env.sh中,写下:

export SPARK_EXECUTOR_MEMORY=2G

如果您尚未使用配置文件,请复制模板文件

cp conf/spark-env.sh.template conf/spark-env.sh

然后进行更改,不要忘记采购

source conf/spark-env.sh

答案 2 :(得分:10)

在我的情况下,我使用ipython笔记本服务器连接到spark。我想为执行者增加内存。

这就是我的所作所为:

from pyspark import SparkContext
from pyspark.conf import SparkConf

conf = SparkConf()
conf.setMaster(CLUSTER_URL).setAppName('ipython-notebook').set("spark.executor.memory", "2g")

sc = SparkContext(conf=conf)

答案 3 :(得分:9)

根据Spark documentation,您可以在提交申请时使用命令行参数--executor-memory更改每个节点的内存。 E.g。

./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master spark://master.node:7077 \
  --executor-memory 8G \
  --total-executor-cores 100 \
  /path/to/examples.jar \
  1000

我已经测试过并且有效。

答案 4 :(得分:1)

worker的默认配置是为每个worker分配Host_Memory - 1Gb。手动调整该值的配置参数为SPARK_WORKER_MEMORY,如您的问题所示:

export SPARK_WORKER_MEMORY=6g