spark mysql oom_Spark性能问题分析及优化【OOM、Stack Overflow】

一.Spark on yarn模式下,client的模式时没有OOM而cluster模式下出现OOM

异常分析

由于client模型没有出现OOM而cluster模式出现OOM,那么出现OOM的原因必然是Driver引起的。Driver在client模式或cluster模型运行所占用的内存是一致的,Driver运行在JVM中,JVM会加载相关的配置参数等信息。不幸的是,在client模式下加载的本地JVM永久代【垃圾回收的某个阶段】配置信息【默认为128M】,而在cluster模式下默认该参数的大小为82M【暂时不确定,不过肯定比client模式小】。这就导致当业务代码逻辑很多的时候,就要构造很多永久代的对象,会占用大量内存,所以就会出现在client模式没有出现OOM而cluster模式出现OOM的情况,导致程序启动失败!

解决方案

在spark代码中配置提交参数:spark.driver.extraJavaOptions -XX:PermSize=128M -XX:MaxPermSize=256M

二.Stack Overflow

异常分析

之所以会产生Stack Overflow,原因在于Stack方法栈中方法的调用链条太长的原因导致的,一般情况有两种:

1.过于深度的递归【常见】

2.过于复杂的业务调用链条【少见】

案例分析

例如一个sql中含有很多的条件组合,在Spark SQL中会通过Catalyst解析变成一棵树并最终变成RDD。在这个过程中可能把sql语句解析成很多的递归调用,此时就有可能产生Stack Overflow的情况。

解决方案

对sql进行拆分,拆分成多个子查询,之后再组合这个查询结果!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值