如何覆盖Spark Java堆大小?

时间:2016-09-17 01:08:23

标签: apache-spark

我们在Docker容器中运行Spark驱动程序和执行程序,由Kubernetes编排。我们希望能够通过Kubernetes控制器YAML在运行时为它们设置Java堆大小。
为了做到这一点,必须设置什么Spark配置?如果我什么都不做,并通过ps -ef查看已启动的流程,我会看到:

root       639   638  0 00:16 ?        00:00:23 /opt/ibm/java/jre/bin/java -cp /opt/ibm/spark/conf/:/opt/ibm/spark/lib/spark-assembly-1.5.2-hadoop2.6.0.jar:/opt/ibm/spark/lib/datanucleus-api-jdo-3.2.6.jar:/opt/ibm/spark/lib/datanucleus-core-3.2.10.jar:/opt/ibm/spark/lib/datanucleus-rdbms-3.2.9.jar:/opt/ibm/hadoop/conf/ -Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=172.17.48.29:2181,172.17.231.2:2181,172.17.47.17:2181 -Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=172.17.48.29:2181,172.17.231.2:2181,172.17.47.17:2181 -Dcom.ibm.apm.spark.logfilename=master.log -Dspark.deploy.defaultCores=2 **-Xms1g -Xmx1g** org.apache.spark.deploy.master.Master --ip sparkmaster-1 --port 7077 --webui-port 18080

正在设置-Xms和-Xmx选项。我尝试在SPARK_DAEMON_JAVA_OPTS="-XmsIG -Xms2G"中设置spark-env.sh并获得:

root      2919  2917  2 19:16 ?        00:00:15 /opt/ibm/java/jre/bin/java -cp /opt/ibm/spark/conf/:/opt/ibm/spark/lib/spark-assembly-1.5.2-hadoop2.6.0.jar:/opt/ibm/spark/lib/datanucleus-api-jdo-3.2.6.jar:/opt/ibm/spark/lib/datanucleus-core-3.2.10.jar:/opt/ibm/spark/lib/datanucleus-rdbms-3.2.9.jar:/opt/ibm/hadoop/conf/ -Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=172.17.48.29:2181,172.17.231.2:2181,172.17.47.17:2181 **-Xms1G -Xmx2G** -Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=172.17.48.29:2181,172.17.231.2:2181,172.17.47.17:2181 **-Xms1G -Xmx2G** -Dcom.ibm.apm.spark.logfilename=master.log -Dspark.deploy.defaultCores=2 **-Xms1g -Xmx1g** org.apache.spark.deploy.master.Master --ip sparkmaster-1 --port 7077 --webui-port 18080

朋友建议设置

spark.driver.memory 2g

spark-defaults.conf中的

,但结果看起来像第一个例子。也许这个设置覆盖了ps -ef命令中的值,但我怎么知道呢?如果spark.driver.memory是正确的覆盖,你可以用这种方式设置堆min和max,还是只设置max?

提前致谢。

1 个答案:

答案 0 :(得分:0)

conf/spark-env.sh中设置SPARK_DAEMON_MEMORY environment variable应该可以解决问题:

  

SPARK_DAEMON_MEMORY要分配给Spark主服务器和工作者守护程序本身的内存(默认值:1g)。