Spark动态内存管理

Spark 1.6 后改为动态内存管理(如果想启用静态内存管理,方法下面会介绍),启动动态主要体现在 存储内存和执行内存的动态。

0af7953aacc8e8a98efc5563d71d80cf.png

动态内存管理内存中分为两大块和预留内存

  • 用于用户数据结构和spark 元数据 的内存,默认占用整个内存的0.4
  • 用于执行task 和 数据存储的内存 (M),默认占用整个内存的0.6(我这边是基于2.4,2.2版本是0.75)
  • 300M 为预留内存
    这个比例可以进行调整,大多数情况下不需要调整这个比例,这个比例适用于大多数情况。

spark.memory.fraction expresses 可以调整这个比例。

内存M

内存 M 分两大块,

* app 执行内存
* app 存储内存
执行内存和存储内存是可以动态借用

执行内存

也就是 shuffles joins sorts aggregations

Execution memory refers to that used for computation in shuffles, joins, sorts and aggregations

存储内存

存储内存也就是 cache(cache persist) 和 内存广播的数据(broadcast)

storage memory refers to that used for caching and propagating internal data across the cluster

在Spark中 执行内存和存储内存是在同一部分内存中。当执行内存没有用到,存储内存可以使用整个内存M,反之同理。在特殊情况下,执行内存可能会霸占存储内存,条件是 存储内存使用的空间比例大于 一个阈值 R。也就是 R区域的存储永远不会被霸占。由于现实的复杂性,存储内存不会去霸占执行内存。(霸占是我翻译后的词,翻译里面是 evict 驱赶)

这样设计的好处是:

  • 当没有使用存储内存,存储内存可以使用整个M,避免不必要的磁盘溢出
  • 确实使用缓存的应用程序可以保留最小的存储空间R,以免其数据块被霸占。最后,这种方法可为各种工作负载提供合理的即用性能,而无需用户了解如何在内部划分内存。

spark.memory.storageFraction 可以调整R 在M中占用的比例,默认 0.5

Spark静态内存管理

首先启用静态内存管理的方式是
spark.memory.useLegacyMode true

98a740b76f37afd4e1548bcd07cf1240.png

spark.shuffle.memoryFraction

在洗牌期间用于 shuffles 过程中的aggregation and cogroups 。在任何给定时间,用于随机播放的所有内存映射的总体大小都受到此限制的限制,超出此限制,内容将开始溢出到磁盘。如果经常发生泄漏,请考虑以spark.storage.memoryFraction为代价增加此值。
我理解成 1.6后的 执行内存中一小块

spark.storage.memoryFraction

用于Spark的内存缓存的Java堆。它不应大于JVM中对象的 Old generation ,默认情况下,该对象的堆大小为0.6,但是如果您配置自己的旧代大小,则可以增加它。
也就是 存储内存

spark.storage.unrollFraction

是用于 block 序列化和反序列化的内存

Fraction of spark.storage.memoryFraction to use for unrolling blocks in memory. This is dynamically allocated by dropping existing blocks when there is not enough free storage space to unroll the new block in its entirety.

剩余的Task 执行内存

执行过程中不仅仅包含Shuffle 还有其他的计算占用内存。

本文参考
http://spark.apache.org/docs/latest/tuning.html#memory-management-overview

Spark两种内存管理的更多相关文章

  1. Spark 动态(统一)内存管理模型

    作者编辑:王玮,胡玉林 一.回顾 在前面的一篇文章中我们介绍了spark静态内存管理模式以及相关知识https://blog.csdn.net/anitinaj/article/details/809 ...

  2. Nginx使用的php-fpm的两种进程管理方式及优化

    PS:前段时间配置php-fpm的时候,无意中发现原来它还有两种进程管理方式.与Apache类似,它的进程数也是可以根据设置分为动态和静态的. php-fpm目前主要又两个分支,分别对应于php-5. ...

  3. (总结)Nginx使用的php-fpm的两种进程管理方式及优化

    PS:前段时间配置php-fpm的时候,无意中发现原来它还有两种进程管理方式.与Apache类似,它的进程数也是可以根据设置分为动态和静态的. php-fpm目前主要又两个分支,分别对应于php-5. ...

  4. 大数据学习day33----spark13-----1.两种方式管理偏移量并将偏移量写入redis 2. MySQL事务的测试 3.利用MySQL事务实现数据统计的ExactlyOnce(sql语句中出现相同key时如何进行累加(此处时出现相同的单词))4 将数据写入kafka

    1.两种方式管理偏移量并将偏移量写入redis (1)第一种:rdd的形式 一般是使用这种直连的方式,但其缺点是没法调用一些更加高级的api,如窗口操作.如果想更加精确的控制偏移量,就使用这种方式 代 ...

  5. 关于VAD的两种内存隐藏方式

    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 技术学习来源:火哥(QQ:471194425) 内存在0环的两种内 ...

  6. Nginx使用的php-fpm的两种进程管理方式及优化(转)

    php-fpm目前主要又两个分支,分别对应于php-5.2.x的版本和php-5.3.x的版本.在5.2.x的版本中,php-fpm.conf使用的是xml格式,而在新的5.3.x版本中,则是和php ...

  7. windows的三种内存管理方法

    Windows的内存管理方法 windows提供了3种方法来进行内存管理: l         虚拟内存,最适合用来管理大型对象或者结构数组 l         内存映射文件,最适合用来管理大型数据流 ...

  8. spark调优篇-Spark ON Yarn 内存管理(汇总)

    本文旨在解析 spark on Yarn 的内存管理,使得 spark 调优思路更加清晰 内存相关参数 spark 是基于内存的计算,spark 调优大部分是针对内存的,了解 spark 内存参数有也 ...

  9. Spark 两种方法计算分组取Top N

    Spark 分组取Top N运算 大数据处理中,对数据分组后,取TopN是非常常见的运算. 下面我们以一个例子来展示spark如何进行分组取Top的运算. 1.RDD方法分组取TopN from py ...

随机推荐

  1. Android工具使用之UiAutomatorViewer

    学习博客: https://blog.csdn.net/l403040463/article/details/79235670    使用, 添加web 网页的监控.

  2. STM32Cube基础工程配置

    开发板:正点原子STM32F4探索者 (2019-08-10 22:04:39) 开发环境:MDK5.28.0.0 + STM32CubeMX5.3.0 + STM32CubeF4 V1.24.0 内 ...

  3. ubuntu中编写shell脚本开机自动启动

    编写脚本是为了不用手动去开启各种服务(也是为了偷懒哈哈) 1.进入终端输入 创建一个后缀为.sh的脚本文件 touch test.sh 编辑脚本 vim test.sh test.sh编写脚本内容   ...

  4. 如何查找YUM安装的JAVA_HOME环境变量详解

    如何查找YUM安装的JAVA_HOME环境变量详解  更新时间:2017年10月27日 09:44:56   作者:铁锚   我要评论 这篇文章主要给大家介绍了关于如何查找YUM安装的JAVA_HOM ...

  5. maven中pom的继承以及dependencies与dependencyManagement的区别

    https://blog.csdn.net/zzm3280/article/details/84952623 分类专栏: maven   本文转自:https://blog.csdn.net/liut ...

  6. 【WEB基础】HTML & CSS 基础入门(10)布局与定位

    块级元素和行内元素 HTML里的元素可以分为块级元素和行内元素两大类:

  7. 2019 263云通信java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.263云通信等公司offer,岗位是Java后端开发,因为发展原因最终选择去了263云通信,入职一年时间了,也 ...

  8. xcode11新项目删除main.storyboard 两种方法

    方法一 心急的童鞋按照老操作完成后再按照如下操作即可 /** 弃用storboard 1.info.plist去除 <key>UIApplicationSceneManifest</ ...

  9. Mysql 游标初识

    MySql 游标初识 认识 游标(cursor), 按字面意思可理解为, 游动的标识, 或者叫做"光标", 这样更容易理解. 就好比现有一张表存储了n行记录, 然后我想每次取出一行 ...

  10. ZYNQ7000性能分析

    提到自动驾驶,机器人视觉,高清摄像机,都要想到摄像头这个单元,先前本侠也讲过一些FPGA应用在高清摄像头和机器视觉中的深度摄像头以及双目摄像头等,FPGA在里面的作用主要是对采集的图像进行处理,对图像 ...