- 在Spark-1.6.0中引入了新的内存管理方式,不再使用Spark-1.6.0之前的静态内存管理机制,而是使用引入的动态内存分配机制。
- StaticMemoryManager和UnifiedMemoryManager都是从MemoryManager抽象类继承而来
- StaticMemoryManager这个类就是Spark-1.6.0之前版本中主要使用的,对各部分内存静态划分好后便不可变化。内存由比例参数限定。
- UnifiedMemoryManager这个类就是Spark-1.6中引入的动态内存分配概念。
该memoryManager主要是使得execution部分和storage部分的内存不像之前由比例参数限定住,而是两者可以互相借用内存。execution和storage总的内存上限由参数`spark.memory.fraction(默认0.75)来设定的,这个比例是相对于整个JVM heap来说的。Storage部分可以申请Execution部分的所有空闲内存,直到Execution内存不足时向Storage发出信号为止。当Execution需要更多内存时,Storage部分会向磁盘spill数据,直到把借用的内存都还上为止。