Spark on YARN:执行程序内存少于通过 spark-submit 设置的内存

D. *_*ler 4 containers executor hadoop-yarn hortonworks-data-platform apache-spark

我在 YARN 集群 (HDP 2.4) 中使用 Spark,设置如下:

  • 1 个主节点
    • 64 GB 内存(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(由于一些开销内存约为 10%,我将内存设置为 5g)。

但是当我查看 Spark UI 时,我看到每个执行程序只有 3.4 GB 的内存,请看截图:

截屏

有人可以解释为什么分配的内存这么少吗?

Kie*_*ong 5

UI 中的存储内存列显示用于执行和 RDD 存储的内存量。默认情况下,这等于 (HEAP_SPACE - 300MB) * 75%。其余的内存用于内部元数据、用户数据结构和其他内容。

你可以通过设置来控制这个数量spark.memory.fraction(不推荐)。在Spark 的文档中查看更多信息