spark 内存管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spark 内存管理相关的知识,希望对你有一定的参考价值。

参考技术A storage(缓存)

已经存储在磁盘上,说明 预留给缓存的内存偏少

在一个stage 执行的若干个task中,

甚至是 shuffle spill(disk)的时候

在一个Executor节点上,内存被分为了堆内内存和堆外内存。
堆外内存是JVM使用的,对于Spark来说是不可见的。
所以我们大多数讨论的是堆内内存。

如上图。

主要用于计算,shuffle用到的 临时内存

当需要缓存rdd的时候用到的内存

在Spark1.6之前,这些配置都是相对静态的
1.6中引入了UNIFIED MEMORY(统一内存管理)特性,进行优化。

(统一内存指的是Execution +Storage的内存 )

1.在默认情况下Execution 和Storage各占一半内存。
2.当Storage内存不足时,可部分占用Execution的内存空间。反之相同。
3.他们之间有一个buffer的区域可以互相占用
4.提高内存的利用率

1.先看webUI具体运行所用的内存大小,配置spark.memory.storageFraction(Storage所占系统内存的比例)
在配置spark.memory.fraction(统一内存占整个内存的大小)加上300M(预留内存)

以上是关于spark 内存管理的主要内容,如果未能解决你的问题,请参考以下文章

spark 内存管理

spark从入门到精通spark内存管理详解- 堆内&堆外内存管理

Spark内存管理详解(下)——内存管理

Spark 内存管理

Spark内存管理详解

spark内存管理器--MemoryManager源码解析