所以,我有一个spark独立集群,有16个工作节点和一个主节点。我从spark\u home/conf文件夹中的主节点使用“shstart all.sh”命令启动集群。主节点有32gbram和14vcpu,而我每个节点有16gbram和8vcpu。我还有一个spring应用程序,当它启动时(使用java-jarapp.jar),它初始化spark上下文。spark-env.sh文件是:
export SPARK_MASTER_HOST='192.168.100.17'
export SPARK_WORKER_CORES=1
export SPARK_WORKER_MEMORY=14000mb
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_OPTS='-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.interval=172800 -Dspark.worker.cleanup.appDataTtl=172800'
我在spark-defaults.conf中没有任何内容,以编程方式初始化spark上下文的代码是:
@Bean
public SparkSession sparksession() {
SparkSession sp = SparkSession
.builder()
.master("spark://....")
.config("spark.cassandra.connection.host","192.168.100......")
.appName("biomet")
.config("spark.driver.memory","20g")
.config("spark.driver.maxResultSize", "10g")
.config("spark.sql.shuffle.partitions",48)
.config("spark.executor.memory","7g")
.config("spark.sql.pivotMaxValues","50000")
.config("spark.sql.caseSensitive",true)
.config("spark.executor.extraClassPath","/home/ubuntu/spark-2.4.3-bin-hadoop2.7/jars/guava-16.0.1.jar")
.config("spark.hadoop.fs.s3a.access.key","...")
.config("spark.hadoop.fs.s3a.secret.key","...")
.getOrCreate();
return sp;
}
在所有这些之后,spark ui的environment选项卡有spark.driver.maxresultsize 10g和spark.driver.memory 20g,但是驱动程序的存储内存的executors选项卡显示为0.0b/4.3gb。
(仅供参考:我以前的spark.driver.memory是10g(编程设置),在executor选项卡中是4.3gb,但现在看来我无法更改它。但我在想,即使我有10g,它不是应该给我超过4.3gb吗?!)
如何更改驾驶员记忆?我试着从spark-defaults.conf设置它,但是没有任何改变。即使我没有设置所有的驱动程序内存(或者设置为小于4.3gb),它仍然会在executors选项卡中显示4.3gb。
1条答案
按热度按时间qltillow1#
我怀疑您正在客户端模式下运行应用程序,然后根据文档:
可以使用spark设置最大堆大小设置。司机。集群模式下的内存,以及客户端模式下的--driver memory命令行选项。注意:在客户机模式下,不能直接在应用程序中通过sparkconf设置此配置,因为此时驱动程序jvm已经启动。
在当前的情况下,spark作业是从应用程序提交的,因此应用程序本身就是一个驱动程序,它的内存像java应用程序一样进行调节-通过
-Xmx
等等。