我在YARN集群(HDP 2.4)中使用Spark,具有以下设置:
-
1 Masternode
-
64 GB RAM(可用48 GB)
-
12个核心(可用8个核心)
-
5 Slavenodes
-
64 GB RAM(可用48 GB)
每个 -
12个核心(可用8个核心)
-
YARN设置
-
所有容器(一个主机)的内存:48 GB
-
最小容器大小=最大容器大小= 6 GB
集群中的 -
vcores = 40(5 x 8个工作核心)
-
minimum #vcores / container = maximum #vcores / container = 1
当我使用命令 spark-submit --num-executors 10 --executor-cores 1 --executor-memory 5g ...
运行我的spark应用程序时,Spark应该为每个执行程序提供5 GB的RAM(由于某些开销内存为~10%,我将内存仅设置为5g) .
但是当我查看Spark UI时,我看到每个执行程序只有3.4 GB的内存,请参见截图:
有人可以解释为什么分配的内存如此之少?
1 回答
UI中的存储内存列显示用于执行和RDD存储的内存量 . 默认情况下,这等于(HEAP_SPACE - 300MB)* 75% . 内存的其余部分用于内部元数据,用户数据结构和其他内容 .
您可以通过设置
spark.memory.fraction
(不推荐)来控制此金额 . 查看更多Spark's documentation