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

动态内存管理内存中分为两大块和预留内存
- 用于用户数据结构和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
.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两种内存管理的更多相关文章
- Spark 动态(统一)内存管理模型
作者编辑:王玮,胡玉林 一.回顾 在前面的一篇文章中我们介绍了spark静态内存管理模式以及相关知识https://blog.csdn.net/anitinaj/article/details/809 ...
- Nginx使用的php-fpm的两种进程管理方式及优化
PS:前段时间配置php-fpm的时候,无意中发现原来它还有两种进程管理方式.与Apache类似,它的进程数也是可以根据设置分为动态和静态的. php-fpm目前主要又两个分支,分别对应于php-5. ...
- (总结)Nginx使用的php-fpm的两种进程管理方式及优化
PS:前段时间配置php-fpm的时候,无意中发现原来它还有两种进程管理方式.与Apache类似,它的进程数也是可以根据设置分为动态和静态的. php-fpm目前主要又两个分支,分别对应于php-5. ...
- 大数据学习day33----spark13-----1.两种方式管理偏移量并将偏移量写入redis 2. MySQL事务的测试 3.利用MySQL事务实现数据统计的ExactlyOnce(sql语句中出现相同key时如何进行累加(此处时出现相同的单词))4 将数据写入kafka
1.两种方式管理偏移量并将偏移量写入redis (1)第一种:rdd的形式 一般是使用这种直连的方式,但其缺点是没法调用一些更加高级的api,如窗口操作.如果想更加精确的控制偏移量,就使用这种方式 代 ...
- 关于VAD的两种内存隐藏方式
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 技术学习来源:火哥(QQ:471194425) 内存在0环的两种内 ...
- Nginx使用的php-fpm的两种进程管理方式及优化(转)
php-fpm目前主要又两个分支,分别对应于php-5.2.x的版本和php-5.3.x的版本.在5.2.x的版本中,php-fpm.conf使用的是xml格式,而在新的5.3.x版本中,则是和php ...
- windows的三种内存管理方法
Windows的内存管理方法 windows提供了3种方法来进行内存管理: l 虚拟内存,最适合用来管理大型对象或者结构数组 l 内存映射文件,最适合用来管理大型数据流 ...
- spark调优篇-Spark ON Yarn 内存管理(汇总)
本文旨在解析 spark on Yarn 的内存管理,使得 spark 调优思路更加清晰 内存相关参数 spark 是基于内存的计算,spark 调优大部分是针对内存的,了解 spark 内存参数有也 ...
- Spark 两种方法计算分组取Top N
Spark 分组取Top N运算 大数据处理中,对数据分组后,取TopN是非常常见的运算. 下面我们以一个例子来展示spark如何进行分组取Top的运算. 1.RDD方法分组取TopN from py ...
随机推荐
- 《C++ 习题与解析》笔记
目录 ####Chapter-1 C++语言概述(错题) ####Chapter-2 类和对象 ####Chapter-3 引用 ####Chapter-4 友元函数 #### Chapter-5 运 ...
- 啊哈!算法(第一章)C#实现
第1节 最简单的排序--桶排序 期末考试完了老师要将同学们的分数按照从高到低排序. 小哼的班上只有 5 个同学,这 5 个同学分别考了 5 分.3 分.5 分.2 分和 8 分,考得真是惨不忍 ...
- (Manjaro)VirtualBox异常修复:RTR3InitEx failed with rc=-1912 (rc=-1912)
引言 VirtualBox运行异常好几天,其中尝试一些操作都没有解决. 版本说明 系统版本:4.19.88-1-MANJARO Vbox镜像:kali-linux-2019.4-vbox-amd64. ...
- Java自学-日期 日期格式化
Java中使用SimpleDateFormat 进行日期格式化类 SimpleDateFormat 日期格式化类 示例 1 : 日期转字符串 y 代表年 M 代表月 d 代表日 H 代表24进制的小时 ...
- Cheat Engine 人造指针
打开游戏 查看内存区域 查看游戏当前使用的内存区域 下面这一段是游戏当前使用的内存区域,选择一片可以读写的内存区域 跳转到这片内存 查看是否有空余内存可以使用 使用空闲内存 我们选择0075DFD0开 ...
- Ubuntu下 安卓 adb 命令报:“insufficient permissions for device: user in plugdev group; ”问题的解决办法
https://blog.csdn.net/freezingxu/article/details/80893025 在接入设备进行联机调试的时候,遇到了这样的问题: insufficient perm ...
- IP切换小技巧
说到这个问题很多人都有同感.公司一般使用的都是静态的IP(如图:使用下面的IP地址),而我们在外面是用的一般是动态获取的IP(如图:自动获得IP地址),因此就产生了一个问题,需要来回切换IP,也就是需 ...
- 深入理解Java类加载器(一):Java类加载原理解析
摘要: 每个开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这个异常背后涉及到的是Java技术体系中的类加载机制.本文简述了JVM三种预定义类加载器,即 ...
- linux/unix发行清单
unix http://www.slackware.com/ https://www.freebsd.org/ http://www.netbsd.org/ https://www.opensuse. ...
- 关于Ubuntu下is not in the sudoers file解决方法
当我在postgres用户下去执行sudo vim demo.sql需要用管理员权限运行时,并且输入本用户的密码,但是输入之后提示如下: postgers is not in the sudoers ...