zoukankan      html  css  js  c++  java
  • 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进行拆分,拆分成多个子查询,之后再组合这个查询结果!

  • 相关阅读:
    MySQL 数据实时同步到 Elasticsearch 的技术方案选型和思考
    编写高质量可维护的代码之优化逻辑判断
    Java8 lambda表达式常见用法
    jar安装到maven本地仓库
    微信小程序获取用户手机号
    spring aop 、Redis实现拦截重复操作
    redis自定义RedisCacheManager
    locust做并发测试实战
    几个绕过短信验证码限制的漏洞挖掘
    通达OA任意用户登录和后台GetShell漏洞复现
  • 原文地址:https://www.cnblogs.com/yszd/p/10491179.html
Copyright © 2011-2022 走看看