YARN 上的 Spark:执行程序内存少于通过 spark-submit 设置的内存
Spark on YARN: Less executor memory than set via spark-submit
我在 YARN 集群 (HDP 2.4) 中使用 Spark,设置如下:
- 1个主节点
- 64 GB RAM(可用 48 GB)
- 12 核(8 核可用)
- 5 个从属节点
- 每个 64 GB RAM(可用 48 GB)
- 每个 12 个核心(可用 8 个核心)
- 纱线设置
- 所有容器(一台主机)的内存:48 GB
- 最小容器大小 = 最大容器大小 = 6 GB
- 集群中的 vcores = 40(5 x 8 个工作内核)
- 最小值#vcores/container = 最大值#vcores/container = 1
当我 运行 我的 spark 应用程序使用命令 spark-submit --num-executors 10 --executor-cores 1 --executor-memory 5g ...
Spark 应该给每个执行程序 5 GB 的 RAM 权利(我只将内存设置为 5g,因为一些内存开销约为 10%) .
但是当我查看 Spark UI 时,我看到每个执行器只有 3.4 GB 的内存,请看截图:
有人可以解释为什么分配的内存这么少吗?
UI中的storage memory列显示用于执行和RDD存储的内存量。默认情况下,这等于 (HEAP_SPACE - 300MB) * 75%。其余内存用于内部元数据、用户数据结构和其他内容。
您可以通过设置 spark.memory.fraction
来控制此数量(不推荐)。在 Spark's documentation
中查看更多信息
我在 YARN 集群 (HDP 2.4) 中使用 Spark,设置如下:
- 1个主节点
- 64 GB RAM(可用 48 GB)
- 12 核(8 核可用)
- 5 个从属节点
- 每个 64 GB RAM(可用 48 GB)
- 每个 12 个核心(可用 8 个核心)
- 纱线设置
- 所有容器(一台主机)的内存:48 GB
- 最小容器大小 = 最大容器大小 = 6 GB
- 集群中的 vcores = 40(5 x 8 个工作内核)
- 最小值#vcores/container = 最大值#vcores/container = 1
当我 运行 我的 spark 应用程序使用命令 spark-submit --num-executors 10 --executor-cores 1 --executor-memory 5g ...
Spark 应该给每个执行程序 5 GB 的 RAM 权利(我只将内存设置为 5g,因为一些内存开销约为 10%) .
但是当我查看 Spark UI 时,我看到每个执行器只有 3.4 GB 的内存,请看截图:
有人可以解释为什么分配的内存这么少吗?
UI中的storage memory列显示用于执行和RDD存储的内存量。默认情况下,这等于 (HEAP_SPACE - 300MB) * 75%。其余内存用于内部元数据、用户数据结构和其他内容。
您可以通过设置 spark.memory.fraction
来控制此数量(不推荐)。在 Spark's documentation