1、调节reduce端缓冲区大小避免OOM异常

  1.1 为什么要调节reduce端缓冲区大小

    对于map端不断产生的数据,reduce端会不断拉取一部分数据放入到缓冲区,进行聚合处理;

    当map端数据特别大时,reduce端的task拉取数据是可能全部的缓冲区都满了,此时进行reduce聚合处理时创建大量的对象,导致OOM异常;

  1.2 如何调节reduce端缓冲区大小

    当由于以上的原型导致OOM异常出现是,可以通过减小reduce端缓冲区大小来避免OOM异常的出现

    但是如果在内存充足的情况下,可以适当增大reduce端缓冲区大小,从而减少reduce端拉取数据的次数,提供性能。

//调节reduce端缓存的大小(默认48M)
conf.set("spark.reducer.maxSizeInFlight", "");

2、解决JVM GC导致的shuffle文件拉取失败

  2.1 问题描述

    下一个stage的task去拉取上一个stage的task的输出文件时,如果正好上一个stage正处在full gc的情况下(所有线程后停止运行),它们之间是通过netty进行通信的,就会出现很长时间拉取不到数据,此时就会报shuffle file not found的错误;但是下一个stage又重新提交task就不会出现问题了。

  2.2 如何解决

    调节最大尝试拉取次数:spark.shuffle.io.maxRetries 默认为3次

    调节每次拉取最大的等待时长:spark.shuffle.io.retryWait 默认为5秒

//调节拉取文件的最大尝试次数(默认3次)
conf.set("spark.shuffle.io.maxRetries", ""); //调节每次拉取数据时最大等待时长(默认为5s)
conf.set("spark.shuffle.io.retryWait", "5s");

3、yarn队列资源不足导致application直接失败

  3.1 问题描述

    如果yarn上的spark作业已经消耗了一部分资源,如果现在再提交一个spark作业,可能会出现以下两个情况:第一、发现yarn资源不足,直接打印fail的log,直接就失败;第二、发现yarn资源不足,该作业就一直处于等待状态,等待分配资源执行。

  3.2 如何解决

    如果发生了上面的第一种问题,可以通过以下方式解决

    方法一:限制同一时间内只有一个spark作业提交到yarn上,确保spark作业的资源是充足的(调节同一时间内每个spark能充分使用yarn的最大资源)。

    方法二:将长时间的spark作业和短时间的spark作业分别提交到不同的队列里(通过线程池的方式实现)。

4、序列化导致的错误

  4.1 问题描述

    如果日志信息出现了Serializable、Serialize等错误信息

  4.2 如何解决

    4.2.1 如果算子函数中使用到外部的自定义的变量,自定义类型需要实行Serializable接口

    4.2.2 如果RDD中使用到自定义的数据类型,自定义类型需要实行Serializable接口

    4.2.3 以上两种情况的类型,不能使用第三方提供的没有实现Serializable接口的类型

5、算子函数返回NULL导致的错误

  5.1 问题描述

    有些算子函数需要有返回值,但是有些数据,就是不想返回任何数据,此时如果返回NULL,可能会导致错误。

  5.2 如何解决

    先返回一个固定的值,之后进行过滤掉指定的数据即可。

6、yarn-cluster模式的JVM内存溢出无法执行的问题

  5.1 问题描述

    有些spark作业,在yarn-client模式下是可以运行的,但在yarn-cluster模式下,会报出JVM的PermGen(永久代)的内存溢出,OOM.

    出现以上原因是:yarn-client模式下,driver运行在本地机器上,spark使用的JVM的PermGen的配置,是本地的默认配置128M;

          但在yarn-cluster模式下,driver运行在集群的某个节点上,spark使用的JVM的PermGen是没有经过默认配置的,默认是82M,故有时会出现PermGen Out of Memory error log.

  5.2 如何处理

    在spark-submit脚本中设置PermGen

    --conf spark.driver.extraJavaOptions="-XX:PermSize=128M -XX:MaxPermSize=256M"(最小128M,最大256M)

    如果使用spark sql,sql中使用大量的or语句,可能会报出jvm stack overflow,jvm栈内存溢出,此时可以把复杂的sql简化为多个简单的sql进行处理即可。

7、checkpoint的使用

  7.1 checkpoint的作用

    默认持久化的Rdd会保存到内存或磁盘中,下次使用该Rdd时直接冲缓存中获取,不需要重新计算;如果内存或者磁盘中文件丢失,再次使用该Rdd时需要重新进行。

    如果将持久化的Rdd进行checkpoint处理,会把内存写入到hdfs文件系统中,此时如果再次使用持久化的Rdd,但文件丢失后,会从hdfs中获取Rdd并重新进行缓存。

  7.2 如何使用

    首先设置checkpoint目录

//设置checkpoint目录
javaSparkContext.checkpointFile("hdfs://hadoop-senior.ibeifeng.com:8020/user/yanglin/spark/checkpoint/UserVisitSessionAnalyzeSpark");

    将缓存后的Rdd进行checkpoint处理

//将缓存后的Rdd进行checkpoint
sessionRowPairRdd.checkpoint();

    

spark性能调优05-troubleshooting处理的更多相关文章

  1. Spark性能调优之代码方面的优化

    Spark性能调优之代码方面的优化 1.避免创建重复的RDD     对性能没有问题,但会造成代码混乱   2.尽可能复用同一个RDD,减少产生RDD的个数   3.对多次使用的RDD进行持久化(ca ...

  2. [Spark性能调优] 第一章:性能调优的本质、Spark资源使用原理和调优要点分析

    本課主題 大数据性能调优的本质 Spark 性能调优要点分析 Spark 资源使用原理流程 Spark 资源调优最佳实战 Spark 更高性能的算子 引言 我们谈大数据性能调优,到底在谈什么,它的本质 ...

  3. Spark性能调优之合理设置并行度

    Spark性能调优之合理设置并行度 1.Spark的并行度指的是什么?     spark作业中,各个stage的task的数量,也就代表了spark作业在各个阶段stage的并行度!     当分配 ...

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

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

  5. Spark性能调优之Shuffle调优

    Spark性能调优之Shuffle调优    • Spark底层shuffle的传输方式是使用netty传输,netty在进行网络传输的过程会申请堆外内存(netty是零拷贝),所以使用了堆外内存. ...

  6. Spark性能调优之解决数据倾斜

    Spark性能调优之解决数据倾斜 数据倾斜七种解决方案 shuffle的过程最容易引起数据倾斜 1.使用Hive ETL预处理数据    • 方案适用场景:如果导致数据倾斜的是Hive表.如果该Hiv ...

  7. Spark性能调优之JVM调优

    Spark性能调优之JVM调优 通过一张图让你明白以下四个问题                1.JVM GC机制,堆内存的组成                2.Spark的调优为什么会和JVM的调 ...

  8. Spark性能调优

    Spark性能优化指南——基础篇 https://tech.meituan.com/spark-tuning-basic.html Spark性能优化指南——高级篇 https://tech.meit ...

  9. spark性能调优 数据倾斜 内存不足 oom解决办法

    [重要] Spark性能调优——扩展篇 : http://blog.csdn.net/zdy0_2004/article/details/51705043

  10. spark 性能调优(一) 性能调优的本质、spark资源使用原理、调优要点分析

    转载:http://www.cnblogs.com/jcchoiling/p/6440709.html 一.大数据性能调优的本质 编程的时候发现一个惊人的规律,软件是不存在的!所有编程高手级别的人无论 ...

随机推荐

  1. spring注解开发:容器中注册组件方式

    1.包扫描+组件标注注解 使用到的注解如下,主要针对自己写的类 @Controller @Service @Repository @Component @ComponentScan 参考 spring ...

  2. Hibernate入门教程(二):Hibernate核心API

    1.Configuraction onfiguration configuration = new Configuration(); configuration.configure(); 到src下面 ...

  3. Codeforces 488D Strip (set+DP)

    D. Strip time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...

  4. 35.Unique Paths(不同的路径)

    Level:   Medium 题目描述:   A robot is located at the top-left corner of a m x n grid (marked 'Start' in ...

  5. 简述ArcGIS的空间连接(Spatial Join)与字段映射(Field Map)操作

    插个广告,制作ArcGIS的Tool工具学习下面的教程就对了:零基础学习Python制作ArcGIS自定义工具 牢骚一下 在使用ArcMap进行空间连接操作的时候,往往会有两种特殊需求,其一是连接重叠 ...

  6. .net core 部署到IIS 以及上 HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure

    安装AspNetCoreModule托管模块后执行 1.net stop was /y 2.net start w3svc 测试可以,但是需要装对应的托管模块的版本. 1. .NET Core与Win ...

  7. MyEclipse更换工作空间报错自动退出

    2.解决方法 后来找到一种方法,解决了我的问题,即找到图二中报错的那个jar包,我的是com.genuitec.eclipse.core_14.0.0.me201602080330.jar,然后将其文 ...

  8. TCP/UDP Linux网络编程详解

    本文主要记录TCP/UDP网络编程的基础知识,采用TCP/UDP实现宿主机和目标机之间的网络通信. 内容目录 1. 目标2.Linux网络编程基础2.1 嵌套字2.2 端口2.3 网络地址2.3.1 ...

  9. 转载 Struts2之------Action类中的get,set方法和execute方法的使用规范和使用流程(规范是没有理由的,必须遵守!!!)

    1,Action中get,set方法的使用流程? 前台form中有一个<input type="text" name="username"/> 如果 ...

  10. 调试Spark应用

    本文摘自:<Hadoop专家-管理.调优与Spark|YARN|HDFS安全>Sam R. Alapati 一.通过日志聚合访问日志 二.当日志聚合未开启时