数客联盟

Spark内存管理

2017-05-03  本文已影响158人  Woople

本文基于Spark 1.6.0之后的版本
Spark 1.6.0引入了对堆外内存的管理并对内存管理模型进行了改进,SPARK-11389

从物理上,分为堆内内存和堆外内存;从逻辑上分为execution内存和storage内存。
Execution内存主要是用来满足task执行过程中某些算子对内存的需求,例如shuffle过程中map端产生的中间结果需要缓存在内存中。
Storage内存主要用来存储RDD持久化的数据或者广播变量。

Off-heap内存

通过下面的代码片段(spark2.1版本),可以清楚的知道execution内存和storage内存是如何分配Off-heap内存的。

  protected[this] val maxOffHeapMemory = conf.getSizeAsBytes("spark.memory.offHeap.size", 0)
  protected[this] val offHeapStorageMemory =
    (maxOffHeapMemory * conf.getDouble("spark.memory.storageFraction", 0.5)).toLong

  offHeapExecutionMemoryPool.incrementPoolSize(maxOffHeapMemory - offHeapStorageMemory)
  offHeapStorageMemoryPool.incrementPoolSize(offHeapStorageMemory)
off-heap内存分配

On-heap内存

对于on-heap内存的划分如下图

on-heap内存分配
上一篇 下一篇

猜你喜欢

热点阅读