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 ...
随机推荐
- 面试题(Python)
面试题 字符串反向输出 s = "给阿姨倒杯卡布奇诺"反向输出S:print(s[::-1]) 面试必问:赋值,浅拷贝,深拷贝 赋值:多个变量指到相同内存浅拷贝中所有的元素,不管第 ...
- DDR3(1):IP核调取
本系列整理一下基于 Xilinx A7 芯片的 DDR3 的使用,此处采用的 DDR3 IP核为软核,即采用 FPGA 逻辑单元.寄存器.查找表等搭建出来 IP核.从 IP 核的调取开始,接着读写测试 ...
- python中 jsonchema 与 shema 效率比较
前面几篇文章总结了python中jsonschema与schema的用法,这里测试一下两者的效率: 上代码: import time from jsonschema import validate, ...
- 在linux上安装elasticsearch简称ES 简单介绍安装步骤
1.简介 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 ...
- C#事件和委托(C#学习笔记03)
委托 1. C# 中的委托类似于 C 或 C++ 中指向函数的指针.委托表示引用某个方法的引用类型变量,运行时可以更改引用对象. 2. 特别地,委托可以用于处理事件或回调函数.并且,所有的委托类都是从 ...
- Linux中的defunct进程(僵尸进程)
一.什么是defunct进程(僵尸进程)?在 Linux 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程.当用ps命令观察进程的执行状态 ...
- PHP-FPM的相关知识的深度解释
一.需要搞清楚几个名词概念 1. CGI(Common Gateway Interface,CGI)通用网关接口, 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展 ...
- JavaScript 简单类型和复杂类型区别
一.基本类型 1.概述 值类型又叫做基本数据类型,简单数据类型.在存储时,变量中存储的是值本身,因此叫做值类型 2.基本类型在内存中的存储 基本数据类型存储在栈区中. 3.基本类型作为函数的参数 基本 ...
- Middle English finaunce金融
Etymology finance From Middle English finaunce, a surety bond.A supply of money or goods. With thy b ...
- 面试题:什么叫平衡二叉查找树--AVL树
查找.插入和删除在平均和最坏情况下都是O(log n) 增加和删除可能需要通过一次或多次树旋转来重新平衡这个树 节点的平衡因子是它的左子树的高度减去它的右子树的高度.带有平衡因子 1.0 或 -1 的 ...