java - Spark Java:无法更改驱动程序内存
问题描述
所以,我有一个带有 16 个工作节点和一个主节点的 spark 独立集群。我从 spark_home/conf 文件夹中的主节点使用“sh start-all.sh”命令启动集群。主节点有 32Gb Ram 和 14 个 VCPUS,而我每个节点有 16Gb Ram 和 8 个 VCPUS。我还有一个 spring 应用程序,当它启动时(使用 java -jar app.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.0 B / 4.3 GB。
(仅供参考:我曾经将 spark.driver.memory 设置为 10g(以编程方式设置),并且在执行程序选项卡中说 4.3Gb,但现在似乎我无法更改它。但我认为即使当我拥有它 10g ,不是应该给我超过4.3Gb吗?!)
如何更改驱动程序内存?我尝试从 spark-defaults.conf 设置它,但没有任何改变。即使我没有设置所有驱动程序内存(或将其设置为小于 4.3Gb),它仍然在 executors 选项卡中显示 4.3Gb。
解决方案
我怀疑您是在客户端模式下运行您的应用程序,然后根据文档:
可以使用 spark 设置最大堆大小设置。司机。集群模式下的内存和客户端模式下的 --driver-memory 命令行选项。注意:在客户端模式下,这个配置不能直接在你的应用程序中通过 SparkConf 设置,因为此时驱动程序 JVM 已经启动。
在当前情况下,Spark 作业是从应用程序提交的,因此应用程序本身就是一个驱动程序,并且它的内存像 Java 应用程序一样进行调节 - via-Xmx
等。
推荐阅读
- javascript - SVG 元素上的 setAttribute 后的 JS 错误不可捕获
- amazon-web-services - 带有 ECS 的 AWS 负载均衡器。如何解决运行状况检查失败的问题?
- windows - 通过 PowerShell 重新连接蓝牙设备
- c# - DataTable 末尾有一个下拉列
- go - have(string) want() 看不懂
- sql - sql查询中自动添加月份的日期参数声明
- c# - 是否可以在查询 graphql 中修改类型名称
- python-3.x - 如何检索嵌套字典中每秒更新的值?
- python - Python Selenium 错误:PlacementList 必须按 display_id 的前 8 位排序
- flutter - Flutter 如何在 ListView.Builder 列表中添加两个复选框或切换?