如果Spark支持内存溢出到磁盘,那么Spark Out of Memory怎么会发生呢?

2024-04-18

我读了一些关于Spark内存管理的文档。

在本页面:如果我没有足够的内存,spark 会做什么? https://stackoverflow.com/questions/20301661/what-will-spark-do-if-i-dont-have-enough-memory。它说:

Spark将分区存储在内存中的LRU缓存中。当缓存达到其大小限制时,它会从中驱逐条目(即分区)。当分区具有“磁盘”属性时(即您的持久性级别允许在磁盘上存储分区),它将被写入 HDD 并且它消耗的内存将被释放,除非您请求它。当您请求它时,它将被读入内存,如果没有足够的内存,则缓存中的其他较旧的条目将被逐出。如果您的分区没有“磁盘”属性,则逐出仅意味着销毁缓存条目而不将其写入 HDD。

那么如果内存不够的话分区会溢出到磁盘,那么Spark运行时怎么会出现内存不足的问题呢?


Spark 只能逐出缓存的 RDD 块。也就是说,如果存在应用程序标记为存储在内存中的 RDD。因此,可以清除存储器的存储部分,但不能清除执行部分。Spark内存管理 https://spark.apache.org/docs/2.4.1/tuning.html#memory-management-overview指出

执行内存是指用于洗牌、连接、排序和聚合中的计算的内存。

以及他们是否可以被驱逐

由于实现的复杂性,存储可能不会驱逐执行。

如果JVM可用的内存量小于所需的执行内存,必然会发生OOM。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果Spark支持内存溢出到磁盘,那么Spark Out of Memory怎么会发生呢? 的相关文章

随机推荐