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