【Spark调优】内存模型与参数调优
【Spark内存模型】
Spark在一个executor中的内存分为3块:storage内存、execution内存、other内存。
1. storage内存:存储broadcast,cache,persist数据的地方。
2. execution内存:执行内存,join、aggregate、map等shuffle中间结果都缓存在这部分内存中,满了再写入磁盘,能够减少IO。其实map过程也是在这个内存中执行的。
3. other内存:程序代码执行时预留给自己的内存。
其中,execution和storage是Spark的Executor中内存的占用大户,other占用内存相对少很多。
【spark1.6.0之前版本】
spark1.6.0之前版本,execution和storage的内存分配是独立配置的,使用的参数配置分别是:
spark.storage.memoryFraction:storage内存占Executor总内存比例,default 0.6。
spark.shuffle.memoryFraction:execution内存占Executor总内存比例,default 0.2。
spark1.6.0之前版本,上述两块内存是互相隔离的,无法空闲借用。这就导致了Executor的内存利用率不高,而且需要根据Application的具体情况,使用者自己来调节这两个参数优化Spark的内存使用。
【spark1.6.0及之后版本】
spark1.6.0及之后版本,execution内存和storage内存支持合并配置,使用的参数配置分别是:
spark.memory.fraction:“execution内存+storage内存” 占Executor总内存比例,default 0.75。
spark.memory.storageFraction:storage内存 默认 占Executor总内存比例,default 0.5,如果运行时不够用,且execution内存有空闲,可以借用execution内存。
execution内存和storage内存可以相互借用,提高了内存的Spark中内存的使用率,同时也减少了OOM的情况。
【其他】
1.spark.memory.useLegacyMode:默认值是false,也就是使用上述spark1.6.0及之后版本新的内存管理模型,推荐使用。如果非要想用老的spark1.6.0之前版本老的内存管理模型,配置为true。
2.如果发现task由于频繁的gc导致运行缓慢(通过spark web ui可以观察到作业的gc耗时),意味着task执行用户代码的内存,也就是上述other内存不够用,尝试调低execution和storage内存看看。
【Spark调优】内存模型与参数调优的更多相关文章
- JVM内存模型及参数调优
堆.栈.方法区概念区别 1.堆 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.根据垃圾回收机制的不同, Java堆有可能拥有不同的结构,最为常见的就是 ...
- JVM内存模型与性能调优
堆内存(Heap) 堆是由Java虚拟机(JVM,下文提到的JVM特指Sun hotspot JVM)用来存放Java类.对象和静态成员的内存空间,Java程序中创建的所有对象都在堆中分配空间,堆只用 ...
- JVM内存结构、参数调优和内存泄露分析
1. JVM内存区域和参数配置 1.1 JVM内存结构 Java堆(Heap) Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建.此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都 ...
- XGBoost模型的参数调优
XGBoost算法在实际运行的过程中,可以通过以下要点进行参数调优: (1)添加正则项: 在模型参数中添加正则项,或加大正则项的惩罚力度,即通过调整加权参数,从而避免模型出现过拟合的情况. (2)控制 ...
- 【深度学习篇】--神经网络中的调优一,超参数调优和Early_Stopping
一.前述 调优对于模型训练速度,准确率方面至关重要,所以本文对神经网络中的调优做一个总结. 二.神经网络超参数调优 1.适当调整隐藏层数对于许多问题,你可以开始只用一个隐藏层,就可以获得不错的结果,比 ...
- hive 调优(二)参数调优汇总
在hive调优(一) 中说了一些常见的调优,但是觉得参数涉及不多,补充如下 1.设置合理solt数 mapred.tasktracker.map.tasks.maximum 每个tasktracker ...
- 记录JVM内存模型,参数含义和优化
一.JVM内存模型 (图片来自网络) 根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) Perm (永久代) 其中New和Tenured属于堆内存,堆内存会从J ...
- 【Spark调优】提交job资源参数调优
[场景] Spark提交作业job的时候要指定该job可以使用的CPU.内存等资源参数,生产环境中,任务资源分配不足会导致该job执行中断.失败等问题,所以对Spark的job资源参数分配调优非常重要 ...
- 【Spark调优】Shuffle原理理解与参数调优
[生产实践经验] 生产实践中的切身体会是:影响Spark性能的大BOSS就是shuffle,抓住并解决shuffle这个主要原因,事半功倍. [Shuffle原理学习笔记] 1.未经优化的HashSh ...
随机推荐
- python 10 迭代器和三元运算符
一.迭代器 1.迭代器协议:对象必须提供一种next方法,执行该方法要么返回迭代中的下一项,要么引起一个stopIteration异常,终止迭代 2.可迭代对象:实现了迭代器协议的对象 3.pytho ...
- css3 --linear-gradient-渐变色
//由上至下变色 background:-moz-linear-gradient( top,#f9b347,#f4ad40,#f9b347); background:-webkit-gradient ...
- 第二阶段第十次spring会议
昨天我对宠物信息进行了添加和调整. 今天我将继续对宠物信息添加保存按钮. private void button2_Click(object sender, EventArgs e) { Settin ...
- Beta冲刺吐槽&&获小黄衫心得
引 个人感觉本次Beta冲刺最大的槽点还是--反向延长 "冲刺周期" 做的不一样很容易,做的更好才是非常困难的 遗留的问题 经历了Alpha冲刺,组内大多数同学也大都对实践感到些许 ...
- npm安装cnpm、vue、react
安装cnpmnpm install -g cnpm --registry=https://registry.npm.taobao.org 安装vuecnpm install --global vue- ...
- python Flask框架mysql数据库配置
我是一个没有笔记习惯的低级程序员,但是我还是喜欢编程,从小学就开始跟着玩电脑,对抓鸡,ddos,跳板刷钻开始了自己的IT 旅程,之后学习了各种语言,但是可惜都不没有达到精通,都是略懂一二,现在想把Py ...
- C#项目学习记录
1, Visual Studio Code 添加VS 2017的开发人员命令提示符---C#编译环境 2, C#编译器和CLI的安装 注意:自己的电脑上配置环境变量时,配置在系统变量的Path中 ...
- JavaScript 平时记录
1,JS中的this 见下面例子,注意函数中的函数 中的this指的是window对象了!!! document.addEventListener('click', function (e) { co ...
- 预装win8的笔记本用第三方分区软件分区后出现0x0000225错误的解决方法/同理win7
最近为采用EFI分区的联想电脑分区,是通过第三方软件进行的,完成后重启,发现系统报错0x0000225,提示插入安装介质修复. 应该是EFI分区导致的 http://zhidao.baidu.com/ ...
- python_flask项目(BBS)_01
项目文件用途说明: config.py , 此文件主要存储一些配置信息,如数据库连接串.debug模式串等. exts.py , 此文件装载第三方库实例对象,如sqlalchemy ...