Spark内存管理系列文章: 
Spark内存管理(1)—— 静态内存管理

堆内内存

Spark 1.6之后引入的统一内存管理机制,与静态内存管理的区别在于Storage和Execution共享同一块内存空间,可以动态占用对方的空闲区域 

其中最重要的优化在于动态占用机制,其规则如下:

  • 设定基本的Storage内存和Execution内存区域(spark.storage.storageFraction参数),该设定确定了双方各自拥有的空间的范围

  • 双方的空间都不足时,则存储到硬盘 
    若己方空间不足而对方空余时,可借用对方的空间(存储空间不足是指不足以放下一个完整的 Block)

  • Execution的空间被对方占用后,可让对方将占用的部分转存到硬盘,然后”归还”借用的空间

  • Storage的空间被对方占用后,无法让对方”归还”,因为需要考虑 Shuffle过程中的很多因素,实现起来较为复杂

动态内存占用机制

动态占用机制如下图所示: 

凭借统一内存管理机制,Spark 在一定程度上提高了堆内和堆外内存资源的利用率,降低了开发者维护 Spark 内存的难度,但并不意味着开发者可以高枕无忧 
譬如:如果Storage的空间太大或者说缓存的数据过多,反而会导致频繁的全量垃圾回收,降低任务执行时的性能,因为缓存的 RDD 数据通常都是长期驻留内存的。所以要想充分发挥 Spark 的性能,需要开发者进一步了解存储内存和执行内存各自的管理方式和实现原理

堆外内存

如下图所示,相较于静态内存管理,引入了动态占用机制 

计算公式

spark从1.6版本以后,默认的内存管理方式就调整为统一内存管理模式 
由UnifiedMemoryManager实现

Unified MemoryManagement模型,重点是打破运行内存和存储内存之间的界限,使spark在运行时,不同用途的内存之间可以实现互相的拆借

Reserved Memory

这部分内存是预留给系统使用,在1.6.1默认为300MB,这一部分内存不计算在Execution和Storage中;可通过spark.testing.reservedMemory进行设置;然后把实际可用内存减去这个reservedMemor得到usableMemory 
ExecutionMemory 和 StorageMemory 会共享usableMemory * spark.memory.fraction(默认0.75) 
注意:

  • 在Spark 1.6.1 中spark.memory.fraction默认为0.75

  • 在Spark 2.2.0 中spark.memory.fraction默认为0.6

User Memory

分配Spark Memory剩余的内存,用户可以根据需要使用 
在Spark 1.6.1中,默认占(Java Heap - Reserved Memory) * 0.25 
在Spark 2.2.0中,默认占(Java Heap - Reserved Memory) * 0.4

Spark Memory

计算方式为:(Java Heap – ReservedMemory) * spark.memory.fraction 
在Spark 1.6.1中,默认为(Java Heap - 300M) * 0.75 
在Spark 2.2.0中,默认为(Java Heap - 300M) * 0.6 
Spark Memory又分为Storage Memory和Execution Memory两部分 
两个边界由spark.memory.storageFraction设定,默认为0.5

下一篇文章中,将带来对Spark统一内存管理设计理念的介绍

Spark内存管理(2)—— 统一内存管理相关推荐

  1. 内存参数 计算_Spark统一内存管理的实现

    本文从源码角度分析spark统一内存管理的实现原理. 统一内存管理对象的创建 统一内存管理对象在SparkEnv中进行创建和管理,这样内存管理就在Driver和Executor端中都可以使用.在Spa ...

  2. CUDA统一内存分析

    CUDA统一内存分析 PascalMIG 如 NVIDIA Titan X 和 NVIDIA Tesla P100 是第一个包含页 GPUs 定额引擎的 GPUs ,它是统一内存页错误处理和 MIG ...

  3. 建设移动统一消息管理中心

    转载本文需注明出处:微信公众号EAWorld,违者必究. 引言: 在不断强调缩减APP数量的今天,企业的APP内容越来越"内聚化"-- 一个APP已经不再是单个服务或者服务于单个业 ...

  4. 500-1000人的科技企业怎么做10多套业务系统和员工的统一认证管理?

    某科技型企业成立于2009年,主要从事ICT基础设施.云基础架构软件研发和服务,通过提供最适合的技术,已为1万多家企业构建复杂业务系统和应用软件. 该企业发展十分迅速,在去年成功上市.为了更好地提高企 ...

  5. Spark内存管理(3)—— 统一内存管理设计理念

    Spark内存管理系列文章:  Spark内存管理(1)-- 静态内存管理  Spark内存管理(2)-- 统一内存管理 在本文中,将会对各个内存的分布以及设计原理进行详细的阐述  相对于静态内存模型 ...

  6. spark 序列化错误 集群提交时_Spark统一内存管理机制

    一.内存的分配 预留内存:300m 可用内存 = 系统内存 -  预留内存 可用内存 = 统一内存(60%) + 其他 (40%) 统一内存 = 存储内存(Storage)50%  + 执行内存(Ex ...

  7. Apache Spark统一内存管理模型详解

    本文将对Spark的内存管理模型进行分析,下面的分析全部是基于ApacheSpark2.x进行的.文章仅对统一内存管理模块(UnifiedMemoryManager)进行分析,如对之前的静态内存管理感 ...

  8. Spark 统一内存管理模型详解

    堆内内存(On-heap Memory) 默认情况下,Spark 仅仅使用了堆内内存.Executor 端的堆内内存区域大致可以分为以下四大块: Execution 内存:主要用于存放 Shuffle ...

  9. spark executor内存分配_二十二、Spark之图解Executor端内存管理

    Spark应用程序执行时,Spark集群会启动Driver和Executor两种JVM进程,Driver端负责创建SparkContext上下文(通往集群的唯一通道),构建DAG, 创建Task并进行 ...

最新文章

  1. 122112_1452_Word1
  2. XVI Open Cup named after E.V. Pankratiev. GP of Ekaterinburg
  3. Django之路——6 Django的模型层(二)
  4. 成功解决 “this version of pandas is incompatible with numpy < 1.15.4\n“ImportError: this version of pand
  5. 实际场景中,云原生存储面临的 7 个挑战
  6. python psutils
  7. c# 衍生类和基类的构造顺序
  8. 湖南工程学院+c语言程序设计人事档案管理系统,程序设计人事档案管理系统.doc...
  9. 加解密技术(Cryptography)基本概念
  10. nessus安装_Nessus忘记密码怎么办?
  11. myeclipse 上安装 Maven3
  12. 基于知识图谱的问答系统,BERT做命名实体识别和句子相似度
  13. 利用双向注意流进行机器理解
  14. windows下载东西提高速度的方式。
  15. Sql server 2008 Express 下载
  16. HTML+CSS大学生个人网站作业模板~黑色的html5个人博客网站模板整站下载
  17. 怎么用dw做html网页模板,使用Dreamweaver制作网页的20个技巧
  18. android 不卡 华为,明明安卓不卡了,但是为什么还比不过苹果?
  19. android音频驱动工程师,4.Android音频驱动(底层1)
  20. [科幻]Java版三体中黑暗森林法则的猜想

热门文章

  1. OSPF简单多区域及末梢区域配置
  2. java有效索引范围_java – 索引范围的上限始终假定为独占?
  3. 计算机管理术语路径描述的是,directory
  4. eas 在linux下安装_linux下easy_install的安装与使用详解
  5. pve 不订阅更新_??“吃鸡”体验服已无更新,暗夜危机2.0或将被1款新游代替
  6. 一直在构建工作空间_大华股份殷俊:AI,构建数字世界的基础
  7. python语言的作者是_Python是一门动态语言
  8. .net ajax批量删除,asp.net 全部选中与取消操作,选中后的删除(ajax)实现无刷新效果...
  9. python16进制转2进制流_将十六进制文件转换为二进制文件
  10. cascader 动态加载 回显_Elementui cascader 级联选择器 动态加载数据,保存后回显的问题...