apache-spark - yarn : Less executor memory than set via spark-submit 上的 Spark

标签 apache-spark containers hadoop-yarn hortonworks-data-platform executor

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

  • 1 个主节点
  • 64 GB RAM(48 GB 可用)
  • 12 核(8 核可用)
  • 5个从节点
  • 每个 64 GB RAM(48 GB 可用)
  • 每个 12 核(8 核可用)
  • yarn 设置
  • 所有容器(一台主机)的内存:48 GB
  • 最小容器大小 = 最大容器大小 = 6 GB
  • 集群中的 vcores = 40(5 x 8 个 worker 核心)
  • 最小#vcores/container = 最大#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 的内存,请看截图:

    screenshot

    有人能解释一下为什么分配的内存这么少吗?

    最佳答案

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

    您可以通过设置 spark.memory.fraction 来控制这个数量。 (不建议)。查看更多 Spark's documentation

    关于apache-spark - yarn : Less executor memory than set via spark-submit 上的 Spark ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38347036/

    相关文章:

    c++ - 在没有 new 和 delete 关键字的情况下编写 C++?最好的方法?

    java - Apache Hadoop 2.7.4,配置 Fair Scheduler 导致错误

    hadoop - 使用自定义 log4j 覆盖 Yarn 中的容器日志

    apache-spark - 如何使用 pyspark 从列表中获取最后一项?

    Docker 教程都绑定(bind)到 80 端口,并且在本地和远程服务器上失败,因为端口 80 已经在使用中

    java - NoClassDefFound : Scala/xml/metadata

    rest - 在Docker API中对标签进行过滤不起作用(可能是bug?)

    apache - Hadoop DistributedCache缓存文件没有绝对路径?

    caching - apache Spark sql 中的缓存表

    apache-spark - 使用 checkpointLocation 偏移量从 Kafka 主题读取流的正确方法