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

问题描述 投票:8回答:1

最近,我一直在运行大量内存的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问题?我错过了什么吗,问题实际上出在其他地方?
scala apache-spark caching memory rdd
1个回答
0
投票

MEMORY_AND_DISK不会“当执行程序内存不足时将对象溢出到磁盘上”。它告诉Spark将不适合内存的分区写入磁盘,以便在需要时从那里加载它们。

处理庞大的数据集,您应该明确考虑将数据持久保存到DISK_ONLY。https://spark.apache.org/docs/latest/rdd-programming-guide.html#which-storage-level-to-choose

© www.soinside.com 2019 - 2024. All rights reserved.