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进行拆分,拆分成多个子查询,之后再组合这个查询结果!

  • 相关阅读:
    数据库日志文件太大的解决方法及原理
    邮件发送组件
    DataConnectionDialog 旧事重提
    从LINQ实例解析LINQ的另类用法,解决多条件组合问题
    重开BLOG.
    找个搜索结果总数原来可以用到这么多的技术
    Discuz3.2与Java 项目整合单点登陆
    一点感触
    Java 处理word文档后在前端展示
    大数据: 完全分布式Hadoop集群HBase安装
  • 原文地址:https://www.cnblogs.com/yszd/p/10491179.html
Copyright © 2011-2022 走看看