第32课:彻底解密Spark 2.1.X中Shuffle 下Task视角内存分配管理
本文根据家林大神系列课程编写 http://weibo.com/ilovepains
Spark 2.1.X内存管理包含2种类型:统一内存管理 UnifiedMemoryManager、静态内存StaticMemoryManager。这两种内存的管理方式最终要落实到Task的运行。我们先从源码角度对Spark内存管理进行回顾,从Spark Task的视角解析Task运行内存管理源码。在Spark 2.1.X中默认使用的UnifiedMemoryManager的统一内存管理的方式,从Task运行的角度来讲是Execution级别的,也就是UnifiedMemoryManager的核心是Execution Memory。Execution Memory主要做的事情是Shuffle、Sort、Aggregate等。我们为什么将Execution Memory的内存调大,理论上讲,Execution Memory的内存越大,IO就越来越少。Execution Memory相对于内存的占用比较强势。当Execution Memory空间不足而且Storage Memory空间也不足的时候,Storage Memory空间会被强制drop掉一部分数据来解决Execution 的空间不足问题。
Spark2.1.X内存管理UnifiedMemoryManager的管理方式从源码的角度看有2个核心方法:
- acquireExecutionMemory
- acquireStorageMemory