1.分水岭 spark1.6版本
Spark 1.6 中引入了新的内存管理方案,以前为StaticMemoryManager,这一节先看看旧的。这个会出现很多OOM异常
#2. 默认使用新的方案StaticMemoryManager
刚刚提到自 1.6 版本引入了新的内存管理方案,但并不是说在 1.6 版本中不能使用旧的方案,而是默认使用新方案。我们可以通过设置 spark.memory.userLegacyMode
值来选择,该值为 false 表示使用新方案,true 表示使用旧方案,默认为 false。该值是如何发挥作用的呢?看了下面的代码就明白了:
// =======================创建MemoryManager==================================================================
/**
* 根据 spark.memory.useLegacyMode 值的不同,会创建 MemoryManager 不同子类的实例:
* 值为 false:创建 UnifiedMemoryManager 类实例,该类为新的内存管理模块的实现
* 值为 true:创建 StaticMemoryManager类实例,该类为1.6版本以前旧的内存管理模块的实现
* */