【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调优】内存模型与参数调优的更多相关文章

  1. JVM内存模型及参数调优

    堆.栈.方法区概念区别 1.堆 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.根据垃圾回收机制的不同, Java堆有可能拥有不同的结构,最为常见的就是 ...

  2. JVM内存模型与性能调优

    堆内存(Heap) 堆是由Java虚拟机(JVM,下文提到的JVM特指Sun hotspot JVM)用来存放Java类.对象和静态成员的内存空间,Java程序中创建的所有对象都在堆中分配空间,堆只用 ...

  3. JVM内存结构、参数调优和内存泄露分析

    1. JVM内存区域和参数配置 1.1 JVM内存结构 Java堆(Heap) Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建.此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都 ...

  4. XGBoost模型的参数调优

    XGBoost算法在实际运行的过程中,可以通过以下要点进行参数调优: (1)添加正则项: 在模型参数中添加正则项,或加大正则项的惩罚力度,即通过调整加权参数,从而避免模型出现过拟合的情况. (2)控制 ...

  5. 【深度学习篇】--神经网络中的调优一,超参数调优和Early_Stopping

    一.前述 调优对于模型训练速度,准确率方面至关重要,所以本文对神经网络中的调优做一个总结. 二.神经网络超参数调优 1.适当调整隐藏层数对于许多问题,你可以开始只用一个隐藏层,就可以获得不错的结果,比 ...

  6. hive 调优(二)参数调优汇总

    在hive调优(一) 中说了一些常见的调优,但是觉得参数涉及不多,补充如下 1.设置合理solt数 mapred.tasktracker.map.tasks.maximum 每个tasktracker ...

  7. 记录JVM内存模型,参数含义和优化

    一.JVM内存模型 (图片来自网络) 根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) Perm (永久代) 其中New和Tenured属于堆内存,堆内存会从J ...

  8. 【Spark调优】提交job资源参数调优

    [场景] Spark提交作业job的时候要指定该job可以使用的CPU.内存等资源参数,生产环境中,任务资源分配不足会导致该job执行中断.失败等问题,所以对Spark的job资源参数分配调优非常重要 ...

  9. 【Spark调优】Shuffle原理理解与参数调优

    [生产实践经验] 生产实践中的切身体会是:影响Spark性能的大BOSS就是shuffle,抓住并解决shuffle这个主要原因,事半功倍. [Shuffle原理学习笔记] 1.未经优化的HashSh ...

随机推荐

  1. apache ab 结果Failed requests探究

    Failed requests: 537 (Connect: 0, Receive: 3, Length: 268, Exceptions: 266) Receive:当客户端connect成功后,并 ...

  2. RQNOJ PID51 / 乒乓球 ☆

    因为是多行输入,所以用了getchar()进行输入,题目没有说明数据范围,所以开始的时候因为数组开的不够大,WA90了一次,我之前开了10000的长度,之后开100000的长度跑过了 一个基本的模拟, ...

  3. UWP作业(二)A Mobile App

    看到给出的十个技术主题,我第一反应就是,对于大部分社交软件来讲,运用到全部这些都并不是什么难题,倒不如谈谈我手机里现有的社交软件中,使用时间最短但(you)是(dian)最(bu)好(hao)奇(yo ...

  4. echarts使用踩坑实录之气泡图

    最近想做一个统计文章点击率,评论率和点赞率的功能,听说echarts可以轻易完成它,于是我就选择使用echarts,考虑到我做的模块上文章是没有分类的,所以我的统计是基于一个个点,这一看嘛,感觉散点图 ...

  5. shell脚本编写遍历某一目录下的所有文件

    遍历/root/321321/目录显示里面的所有文件 #!/bin/bash dir=`ls /root//` #定义遍历的目录 for i in $dir do echo $i done

  6. Promise注意点

    一. Promise API  概述 var p = new Promise( function(resolve,reject){ // resolve(..) 用于决议 / 完成这个 promise ...

  7. laravel 打印完整sql

    DB::connection()->enableQueryLog(); // 开启QueryLog \App\User::find(1); dump(DB::getQueryLog());

  8. .gvfs: Permission denied

    命令行输入umount .gvfs rm -rf .gvfs

  9. 理解存储引擎MyISAM与InnoDB

    1.MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.不 ...

  10. 洛谷 质因子分 p2043

    #include <iostream>#include <algorithm>#include <cstring>using namespace std; cons ...