Spark之内存管理MemoryManager及统一内存管理源码分析

Spark MemoryManager

1.MemoryManager接口

1.1.概述

在Spark中,MemoryManager接口定义了Storage内存和Execution内存统一管理分配的公共方法。包括堆内以及堆外内存。

1.2.相关成员

// 堆内Storage内存池
protected val onHeapStorageMemoryPool = new StorageMemoryPool(this, MemoryMode.ON_HEAP)
// 堆外Storage内存池 
protected val offHeapStorageMemoryPool = new StorageMemoryPool(this, MemoryMode.OFF_HEAP)
// 堆内Execution内存池 
protected val onHeapExecutionMemoryPool = new ExecutionMemoryPool(this, MemoryMode.ON_HEAP)
// 堆外Storage内存池
protected val offHeapExecutionMemoryPool = new ExecutionMemoryPool(this, MemoryMode.OFF_HEAP)

// 设置 onHeapStorageMemoryPool 大小为 onHeapStorageMemory
onHeapStorageMemoryPool.incrementPoolSize(onHeapStorageMemory)
// 设置 onHeapExecutionMemoryPool 大小为 onHeapExecutionMemory
onHeapExecutionMemoryPool.incrementPoolSize(onHeapExecutionMemory)

// 获取参数 spark.memory.offHeap.size 的值,即设置的堆外内存大小(默认值为0)
protected[this] val maxOffHeapMemory = conf.get(MEMORY_OFFHEAP_SIZE)
// 获取参数 spark.memory.storageFraction 的比值,即堆外内存中 Stroage 内存堆占比
protected[this] val offHeapStorageMemory =
    (maxOffHeapMemory * conf.get(MEMORY_STORAGE_FRACTION)).toLong

// 设置堆外 offHeapExecutionMemoryPool 大小为 最大堆外内存 - 堆外 StorageMemory
offHeapExecutionMemoryPool.incrementPoolSize(maxOffHeapMemory - offHeapStorageMemory)
// 设置堆外 storageMemoryPool 大小为 offHeapStorageMemory
offHeapStorageMemoryPool.incrementPoolSize(offHeapStorageMemory)

至于堆内内存onHeapStorageMemory和onHeapExecutionMemory这两个参数的大小值,与其具体实现MemoryManager的实现类有关系。可参见接下来的UnifiedMemoryManager实现。

其中,参数spark.memory.offHeap.enabled用来制定是否使用堆外内存,默认是false,即不开启。

1.3.内存池MemoryPool接口

该接口定义了内存池的相关公共方法,Storage内存池StorageMemoryPool和Execution内存池ExecutionMemoryPool都继承自该接口。

该接口主要方法:

// 返回内存池大小
final def poolSize: Long
// 返回可用内存池大小
final def memoryFree: Long
// 扩大内存池大小
final def incrementPoolSize(delta: Long): Unit
// 缩小内存池大小
final def decrementPoolSize(delta: Long): Unit 
// 返回内存池当前的使用量
def memoryUsed: Long

1.4.内存管理相关接口

// 申请Storage内存
def
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值