【Spark内存分配详解.pdf】
在 Spark 1.5 版本及以前,Spark 采用静态内存管理模型。Spark 1.6 版本推出以后,Spark
采用了统一内存管理模型。
------静态内存管理:
Spark 在一个 Executor 中的内存分为三块,一块是 execution 内存,一块是 storage 内存,一块是 other 内存。
- 1.storage 内存是存储 broadcast , cache ,persist 数据的地方。其中 10% ( 60% 10% )用于防止 OOM 。另外 90% 中的 20% 用于 unroll ,数据展开的(比如说, rdd.perist 让数据序列化持久化,当要读出来的时候就需要反序列化,可以理解为解压,这就需要 unroll 这部分的内存空间了),其余的内存( 90% 80% )用于 RDD 缓存数据和广播变量。
- execution 内存是执行内存,文档中说 join,aggregate 都在这部分内存中执行, shuffle的数据也会先缓存在这个内存 中,满了再写入磁盘,能够减少 IO 。其实 map 过程也是在这个内存中执行的。
- other 内存是程序执行时预留给自己的内存,