我们在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?
提前致谢。
答案 0 :(得分:0)
在conf/spark-env.sh
中设置SPARK_DAEMON_MEMORY
environment variable应该可以解决问题:
SPARK_DAEMON_MEMORY
要分配给Spark主服务器和工作者守护程序本身的内存(默认值:1g)。