1、executor堆外内存

有时候,如果你的spark作业处理的数据量特别特别大,几亿数据量;然后spark作业一运行,时不时的报错,shuffle file cannot find,executor、task lost,out of memory(内存溢出);
可能是说executor的堆外内存不太够用,导致executor在运行的过程中,可能会内存溢出;然后可能导致后续的stage的task在运行的时候,可能要从一些executor中去拉取shuffle map output文件,但是executor可能已经挂掉了,关联的block manager也没有了;所以可能会报shuffle output file not found;resubmitting task;executor lost;spark作业彻底崩溃。

上述情况下,就可以去考虑调节一下executor的堆外内存。也许就可以避免报错;此外,有时,堆外内存调节的比较大的时候,对于性能来说,也会带来一定的提升。

2、executor的堆外内存不太够用,导致Spark作业停止原理图


分析:1)Stage的executor跑着跑着,突然内存不足了,堆外内存不足了,可能会OOM,挂掉。block manager也没有了,数据也丢失掉了。

2)如果此时,stage0的executor挂了,block manager也没有了;此时,stage1的executor的task,虽然通过Driver的MapOutputTrakcer获取到了自己数据的地址;但是实际上去找对方的block manager获取数据的时候,是获取不到的
此时,就会在spark-submit运行作业(jar),client(standalone client、yarn client),在本机就会打印出log
shuffle output file not found。。。
DAGScheduler,resubmitting task,一直会挂掉。反复挂掉几次,反复报错几次,整个spark作业就崩溃了

4、参数设置

--conf spark.yarn.executor.memoryOverhead=2048


spark-submit脚本里面,去用--conf的方式,去添加配置;一定要注意!!!切记,不是在你的spark作业代码中,用new SparkConf().set()这种方式去设置,不要这样去设置,是没有用的!一定要在spark-submit脚本中去设置。
spark.yarn.executor.memoryOverhead(看名字,顾名思义,针对的是基于yarn的提交模式)
默认情况下,这个堆外内存上限大概是300多M;后来我们通常项目中,真正处理大数据的时候,这里都会出现问题,导致spark作业反复崩溃,无法运行;此时就会去调节这个参数,到至少1G(1024M),甚至说2G、4G
通常这个参数调节上去以后,就会避免掉某些JVM OOM的异常问题,同时呢,会让整体spark作业的性能,得到较大的提升。

5、连接等待超时导致作业失败原理图

分析:1)executor,优先从自己本地关联的BlockManager中获取某份数据
如果本地block manager没有的话,那么会通过TransferService,去远程连接其他节点上executor的block manager去获取

2)JVM调优:垃圾回收
处于垃圾回收过程中,所有的工作线程全部停止;相当于只要一旦进行垃圾回收,spark / executor停止工作,无法提供响应

3)task创建的对象特别大,特别多,频繁的让JVM堆内存满溢,进行垃圾回收。

导致现象:

此时呢,就会没有响应,无法建立网络连接;会卡住;ok,spark默认的网络连接的超时时长,是60s;如果卡住60s都无法建立连接的话,那么就宣告失败了。
碰到一种情况,偶尔,偶尔,偶尔!!!没有规律!!!某某file。一串file id。uuid(dsfsfd-2342vs--sdf--sdfsd)。not found。file lost。
这种情况下,很有可能是有那份数据的executor在jvm gc。所以拉取数据的时候,建立不了连接。然后超过默认60s以后,直接宣告失败。
报错几次,几次都拉取不到数据的话,可能会导致spark作业的崩溃。也可能会导致DAGScheduler,反复提交几次stage。TaskScheduler,反复提交几次task。大大延长我们的spark作业的运行时间。

6、参数设置

可以考虑调节连接的超时时长。Spark  2.1.0版本
--conf spark.network.timeoutt=300
spark-submit脚本,切记,不是在new SparkConf().set()这种方式来设置的。
以前版本采用:spark.core.connection.ack.wait.timeout(spark core,connection,连接,ack,wait timeout,建立不上连接的时候,超时等待时长)
调节这个值比较大以后,通常来说,可以避免部分的偶尔出现的某某文件拉取失败,某某文件lost掉了。。。

7、为什么在这里讲这两个参数呢?

因为比较实用,在真正处理大数据(不是几千万数据量、几百万数据量),几亿,几十亿,几百亿的时候。很容易碰到executor堆外内存,以及gc引起的连接超时的问题。file not found,executor lost,task lost。
调节上面两个参数,还是很有帮助的。

Spark---JVM调优之调节executor离堆内存与连接等待时长相关推荐

  1. JVM 调优实战--jmap的使用以及内存溢出分析

    目录 jmap的使用以及内存溢出分析 查看内存使用情况 查看内存中对象数量及大小 将内存使用情况dump到文件中 通过jhat对dump文件进行分析 通过MAT工具对dump文件进行分析 MAT介绍 ...

  2. JVM调优:-Xms40M -Xmx60M 指定堆的最小、最大大小

  3. Java 性能优化系列之3.2[JVM调优]

    实用JVM参数 1. JIT 编译参数 JIT(Just-In-Time)编译器, 可以在运行时将字节码编译成本地代码,从而提升函数的执行效率. -XX:CompileThreshold为 JIT编译 ...

  4. JVM调优-调优原则与思路

    一.实施过程中的原则 在调优之前,我们需要记住下面的原则: 1.在应用上线之前,先考虑将机器的JVM参数设置到最优(最适合). 2.多数导致GC问题的Java应用,都不是因为我们参数设置错误,而是代码 ...

  5. JVM调优参数与常用工具

    常用的JVM调优参数 -Xms:设置初始堆大小 -Xmx:设置最大堆大小 -Xmn:设置年轻代的大小 -Xss:设置每个线程可使用的内存大小,即栈的大小.在相同物理内存下,减小这个值能生成更多的线程, ...

  6. 【Spark】Spark调优 JVM调优

    文章目录 1. 为什么要进行JVM调优?为什么要进行垃圾回收? 3.大数据启动的JVM进程 4.CDH版本的Spark默认优化 1. 为什么要进行JVM调优?为什么要进行垃圾回收? Spark是由Sc ...

  7. Spark性能调优之资源分配

    **性能优化王道就是给更多资源!**机器更多了,CPU更多了,内存更多了,性能和速度上的提升,是显而易见的.基本上,在一定范围之内,增加资源与性能的提升,是成正比的:写完了一个复杂的spark作业之后 ...

  8. Spark参数调优基础版

    Spark调优部分参数 可以在创建SparkSession对象时提供config(key,value)的方式进行赋值 1.shuffle相关调优参数 spark.shuffe.file.buffer ...

  9. Spark shuffle调优

    Spark shuffle是什么 Shuffle在Spark中即是把父RDD中的KV对按照Key重新分区,从而得到一个新的RDD.也就是说原本同属于父RDD同一个分区的数据需要进入到子RDD的不同的分 ...

最新文章

  1. ado.net图片点击刷新_华为官方解答为何微信保存的图片不在图库显示
  2. 最强的浏览器插件——油猴脚本
  3. HTML5 本地文件操作之FileSystemAPI整理(一)
  4. 查看真实的执行计划 绑定变量对执行计划的影响--“绑定变量窥探”
  5. LeetCode 295. 数据流的中位数 Hard难度
  6. Android之稍微靠谱点的透明Activity(不获取触摸事件)
  7. java线程“生产/消费”模型2
  8. 精选| 2021年9月R新包推荐(第58期)
  9. Java处理微博数据集中的超链接
  10. easyui前端框架模板_.NET Core基于Ace Admin的响应式框架
  11. 想精通正则表达式 这几个正则表达式学习资料及工具你必须有!
  12. (转)游戏程序员养成计划 (更新2010.11.6)
  13. 绝对不能错过!计算机视觉Polygon Mesh Processing读书笔记——3
  14. 国家开放大学2021春1076常微分方程题目
  15. modscan32做主站 一直显示MODBUS MESSAGE TIME-OUT
  16. Adobe 全家桶系列卸载工具
  17. Loongson2f_龙芯逸珑8089A_扩容硬盘安装debian8(sd卡扩容)
  18. Web-Security-Learning
  19. html页面中如何添加背景音乐
  20. 第十章分治算法(大数相乘)

热门文章

  1. 2019年学习数据科学是什么感受
  2. 多线程计算多分批计算_如何在Excel 2013中更改自动计算和多线程功能
  3. 如何去除 EXCEL 文件中的重复行
  4. android studio搜索功能实现,Android Studio查找功能(搜索功能)及快捷键
  5. 大学各专业计算机专属表情包,大学各专业的表情包!——物理学最吓人!建筑类最霸气!...
  6. 【爱因斯坦谜题】用python基础语法解决爱因斯坦谜题
  7. AI如何影响智能交互
  8. 【转载】SQL LCASE() 函数
  9. Web前端技术分享:CSS菜单图标相关知识
  10. php分页命名锚记怎么用,wordpress文章或页面设置命名锚记(锚点)的方法