【问题标题】:YARN "Memory Used" in RM UI twice as spark-shell requestedRM UI 中的纱线“已使用内存”是 spark-shell 请求的两倍
【发布时间】:2017-10-20 23:11:14
【问题描述】:

spark-shell 开始使用:

spark-shell --master yarn --executor-memory 4G --num-executors 100

我希望 yarn 为 spark-shell 分配大约 400GB 内存,但是当我转到 RM UI 时,它显示“已使用内存”增加了大约 804GB。

我正在运行 HDP 2.5,在 yarn-site.xml 中将 yarn.scheduler.minimum-allocation-mb 设置为 4096。

对这是怎么发生的感到困惑。


原来是spark内存开销和yarn内存分配机制的问题,检查一下:

http://www.wdong.org/spark-on-yarn-where-have-all-the-memory-gone.html

规则 1. Yarn 总是将内存需求四舍五入为 yarn.scheduler.minimum-allocation-mb 的倍数,默认为 1024 或 1GB。这就是为什么司机要求的4G+384M在Yarn中显示为5G。参数 yarn.scheduler.minimum-allocation-mb 实际上是“minimum-allocation-unit-mb”。这可以通过将参数设置为质数(例如 97)轻松验证,并查看 Yarn allocate by multiple of the number。

规则 2。在向 Yarn 询问金额之前,Spark 会向 SPARK_EXECUTOR_MEMORY/SPARK_DRIVER_MEMORY 添加开销。

也就是说,在我的配置中,即使 spark-shell 也只要求 384MB 开销内存,这是 spark.yarn.executor.memoryOverhead 的默认值,yarn 会为它再分配 4GB。

【问题讨论】:

    标签: hadoop apache-spark hadoop-yarn


    【解决方案1】:

    我的理解是--executor-memory 为您提供了执行程序可以使用的内存的上限,并成为执行程序的-Xmx(JVM)。

    在特定的时间点,它可能会使用更少(这很好)。

    我会去 YARN 节点并执行 jps -lm 并查看执行程序 JVM 使用的属性。

    【讨论】:

    • 我看到正好有 100 个 CoarseGrainedExecutorBackend java 进程带有“-Xmx4096m”,每个人占用大约 480MB RSS 和大约 6GB VSZ(根据 ps aux)。加起来不超过 800GB。
    • 然而,这是一个问题 YARN UI 如何显示流程(与 Spark 本身几乎没有关系,不是吗?
    • 原来是spark内存开销和yarn内存分配机制的问题,查看问题详细解释。
    【解决方案2】:

    我在我们的环境中遇到了同样的问题,其中 yarn 设置为每个核心分配 12 GB。使用--executor-memory 12g 提交作业的 Spark 用户试图利用分配的内存。然而,这导致 yarn 为每个核心再分配 12 GB。例如,一个 200 核的 Hive 查询将使用约 2.5 TB 的内存,但提交的 200 核 Spark 作业将驱动程序内存和执行程序内存设置为 12 GB 将使用近 5 TB 的内存。

    当应用程序请求的内存超过可用内存时,纱线会分配另一个“单元”内存。因此,我们的 Spark 作业必须请求超过 12 GB 的总量才能触发此额外分配。正如您链接的帖子所提到的,spark 的开销内存设置为最大值 384 MB 或 0.07 * 执行程序内存。因此,在我们的具体案例中,每个执行程序实际上都在请求 12 + (12 * 0.07) = 12.84 GB。由于这大于纱线分配的单元,因此每个核心随后获得了第二个 12 GB 的内存单元。解决此问题的方法是将驱动程序和执行程序内存减少到足够低,以使内存和开销总计小于 12 GB。在我们的例子中,将--driver-memory--executor-memory 设置为11150m 就可以了(为简单起见,您也可以使用11g

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 2023-03-11
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      相关资源
      最近更新 更多