gpt4 book ai didi

scala - Spark - StorageLevel(DISK_ONLY 与 MEMORY_AND_DISK)和内存不足 Java 堆空间

转载 作者:行者123 更新时间:2023-12-03 01:16:16 35 4
gpt4 key购买 nike

最近我一直在运行一个占用大量内存的 Spark 作业,并开始想知道 Spark 的存储级别。我保留了一个 RDD,因为它使用 StorageLevel.MEMORY_AND_DISK 使用了两次。我在工作期间获得 OOM Java 堆空间。然后,当我完全删除持久性时,工作已成功完成并完成。

我一直认为 MEMORY_AND_DISK 基本上是一个完全安全的选项 - 如果内存不足,它会将对象溢出到磁盘,完成。但现在看来,它并没有真正按照我预期的方式发挥作用。

这引出了两个问题:

  1. 如果当执行器内存不足时MEMORY_AND_DISK将对象溢出到磁盘,那么使用DISK_ONLY模式是否有意义(除了一些非常具体的配置,例如 Spark.memory.storageFraction=0)?
  2. 如果当执行器内存不足时 MEMORY_AND_DISK 将对象溢出到磁盘,我如何通过删除缓存来解决 OOM 问题?我是否错过了什么,而问题实际上出在其他地方?

最佳答案

所以,几年后;)这就是我相信发生的事情:

  • 缓存不是节省执行内存的方法。您能做的最好的事情就是在缓存时不要丢失执行内存 (DISK_ONLY)。
  • 很可能是缺乏执行内存导致我的作业抛出 OOM 错误,尽管我不记得实际的用例。
  • 我使用了 MEMORY_AND_DISK 缓存,而 MEMORY 部分从统一区域中取出了一部分,这使得我的工作无法完成(因为 Execution = Unified - 存储内存不足以执行该作业)
  • 由于上述原因,当我完全删除缓存时,速度会变慢,但作业有足够的执行内存来完成。
  • 使用 DISK_ONLY 缓存,工作似乎也会完成(尽管不一定更快)。

https://spark.apache.org/docs/latest/tuning.html#memory-management-overview

关于scala - Spark - StorageLevel(DISK_ONLY 与 MEMORY_AND_DISK)和内存不足 Java 堆空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46458494/

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