我正在配置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"
但是用过的内存仍然是一样的。我该怎么做才能改变用过的内存?
答案 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
。