gpt4 book ai didi

apache-spark - 为什么缓存小型 Spark RDD 需要在 Yarn 中分配大量内存?

转载 作者:行者123 更新时间:2023-12-04 15:09:53 25 4
gpt4 key购买 nike

缓存的RDD(一共8个)并不大,只有30G左右,但是在Hadoop UI上,显示Spark应用占用了大量内存(没有active jobs)运行),即 1.4T,为什么这么多?

enter image description here

enter image description here

为什么它显示大约 100 个执行程序(这里,即 vCores),即使没有正在运行的事件作业?

此外,如果缓存的 RDD 存储在 100 个执行器中,这些执行器是否会保留下来,不再有其他 Spark 应用程序可以使用它们来运行任务?换句话说这个问题:在执行器中保留一点内存资源(.cache)会阻止其他 Spark 应用程序利用它们的空闲计算资源吗?

是否有任何潜在的 Spark config/zeppelin config 会导致这种现象?


更新 1

检查 Spark conf (zeppelin) 后,似乎有 spark.executor.memory=10G 的默认设置(默认由管理员配置),这可能是原因。

但是,这里有一个新问题:是否可以只保留每个执行程序中缓存的 RDD 所需的内存并释放其余内存,而不是始终保留初始设置的内存 spark.executor.memory=10G?

Spark 配置

enter image description here

最佳答案

也许你可以尝试repartition(n)你的 RDD 减少了 n < 100缓存前的分区。一个约 30GB 的 RDD 可能适合十个 10GB 执行器的存储内存。可以找到 Spark 内存管理的一个很好的概述 here .这样,只有那些持有缓存 block 的执行器才会被“固定”到您的应用程序,而其余的可以在 spark.dynamicAllocation.executorIdleTimeout 之后通过 Spark 动态分配由 YARN 回收。 (默认 60 秒)。

问:是否可以只保留每个执行程序中缓存的 RDD 所需的内存并释放其余内存,而不是始终保留初始设置的内存 spark.executor.memory=10G?

当 Spark 使用 YARN 作为其执行引擎时,YARN 分配指定(按应用程序)大小的容器——至少 spark.executor.memory+spark.executor.memoryOverhead ,但在 pyspark 的情况下可能更大——对于所有执行者。 Spark 在容器内部实际使用多少内存变得无关紧要,因为分配给容器的资源将被视为其他 YARN 应用程序的禁区。

关于apache-spark - 为什么缓存小型 Spark RDD 需要在 Yarn 中分配大量内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65412479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com