【发布时间】:2021-04-01 09:07:31
【问题描述】:
缓存的RDD(共8个)并不大,只有30G左右,但是在Hadoop UI上,它显示Spark应用程序正在占用大量内存(没有活动作业running),即1.4T,为什么这么多?
为什么即使没有活动的作业正在运行,它也会显示大约 100 个执行程序(此处为 vCore)?
另外,如果缓存的 RDD 存储在 100 个 executor 中,这些 executor 是否会保留,其他 Spark 应用程序不能再使用它们来运行任务?换个说法:在执行程序中保留一点内存资源 (.cache) 会阻止其他 Spark 应用程序利用它们的空闲计算资源吗?
是否有任何潜在的 Spark 配置 / zeppelin 配置会导致这种现象?
更新 1
检查 Spark conf (zeppelin) 后,似乎有spark.executor.memory=10G 的默认设置(默认由管理员配置),这可能是原因。
但是,这里有一个新问题:是否可以只保留每个执行器中缓存的 RDD 所需的内存并释放其余部分,而不是始终保留最初设置的内存 spark.executor.memory=10G?
火花配置
【问题讨论】:
-
内存消耗可能有很多原因——缓存的 RDD 只是其中的一部分。如果你想减少内存使用,你可以尝试将
spark.executor.memory设置为较低的值 -
@mck 谢谢。如果没有作业在运行并且缓存的 RDD 如此之小,还有什么可以将内存占用到 1.4T?
-
以前运行的作业可能有一些未收集的垃圾
-
@mck 的确,这是鼓舞人心的提示,Spark 不应该自动进行 GC,还是有办法让用户触发 GC?我想这应该是一个普遍的问题,而且很严重,因为它在运行应用程序后占用了很多资源..
-
我不确定,根据我的经验,它会在内存不足时收集垃圾。如果你给它 1T,它会一直使用它,直到空间用完。
标签: apache-spark hadoop hadoop-yarn apache-zeppelin