Spark 内存管理概述

概要

Spark被称作内存计算引擎,使得很多初学者认为Spark运行环境一定需要大量内存,更有甚者,认为Spark运行期会把原始数据一次性全部加载到内存。解开这些疑团,需要了解Spark运行时的机制,Spark的计算发生在Executor,因此,这里的运行时机制是指Executor的行为。

对于Spark运行时机制,先从内存管理入手,了解这部分,对于Spark调优也大有裨益,Spark开发中很常见的问题是OOM和full gc pause导致的假死现象,特别是在Spark1.6之前的版本中,很可能会因为不熟悉内存管理导致大量内存运行时被闲置而浪费,这个问题在1.6中引入了新的内存管理器UnifiedMemoryManager而得到优化。

相关概念

内存管理对应的接口为MemoryManager,但Executor使用TaskMemoryManagerMemoryStore间接调用MemoryManager管理内存,涉及到的相关概念如下

概念作用
MemoryManager管理CoarseGrainedExecutorBackend进程的内存(即Executor),其将内存主要划分为storage、execution和other三部分。CoarseGrainedExecutorBackend上运行的Task共享这部分内存
TaskMemoryManager内部使用MemoryManager,管理所有Task的execution这部分内存
MemoryStore主要作用为管理内存中的block,即管理storage这部分内存
MemoryPool用于记录storage、execution内存的使用情况,对应子类分别为StorageMemoryPool、ExecutionMemoryPool
StaticMemoryManagerspark 1.6之前的内存管理器,静态内存管理器,这里的静态是指storage、execution内存的占比及界限是固定的。
UnifiedMemoryManagerspark 1.6新加入的内存管理器,统一资源管理器,和StaticMemoryManager最大不同之处在于,storage、execution内存界限不是固定的,可以互相借用

MemoryManager

MemoryManager负责管理内存,查看其定义

从上图中可以到内存有on-heap、off-heap之分,后续介绍,其UML如下
这里写图片描述
从上图可以得到如下信息

  1. MemoryManager的方法主要功能是管理内存,acquire*和release*。
  2. 从方法名判断,MemoryManager将内存分为了storage、execution、unroll三部分管理,下面会进一步介绍。
  3. 有三个配置是和Tungsten相关,Tungsten是spark执行引擎有史以来最大的改动,以榨干性能为己任。具体是关于ON_HEAPOFF_HEAP的,如下
    这里写图片描述

内存划分

根据上面对MemoryManager分析,MemoryManager将内存分为如下几部分
这里写图片描述
各部分对应的功能如下

名称作用
Storage用于cache block,保存broadcast数据,以及发送large task result
UnrollUnroll占用的是Storage的内存,Unroll是指 BlockManager收到iterator形式的数据,最终存放到内存的过程
Execution保存shuffles、 joins、sorts 、aggregations等操作的中间数据
other剩余的部分,用于class以及spark中的元数据等开销

上面各部分所占比例由内存管理器实现类StaticMemoryManagerUnifiedMemoryManager确定。

on-heap、off-heap

Execution的内存有两种管理方式on-heap、off-heap,如下

名称作用
on-heap使用JVM管理对象
off-heap[tungsten memory相关优化]手动管理,减小JVM对象空间及gc开销

off-heap使用sun.misc.Unsafe API直接向OS申请释放内存,具体实现及意义会在Tungsten相关部分介绍,启用方式如下

StaticMemoryManager

Spark 内存管理之StaticMemoryManager

UnifiedMemoryManager

Spark 内存管理之UnifiedMemoryManager

Tungsten

Spark 内存管理之Tungsten

参考:

Unified Memory Management in Spark 1.6

MEMTUNE: Dynamic Memory Management for
In-memory Data Analytic Platforms

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值