Spark 之 故障排除(二)

这是我参与更文挑战的第12天,活动详情查看:更文挑战

故障排除四:解决算子函数返回NULL导致的问题

  • 在一些算子函数里,需要我们有一个返回值,但是在一些情况下我们不希望有返回值,此时我们如果直接返回NULL,会报错,例如Scala.Math(NULL)异常。
  • 如果你遇到某些情况,不希望有返回值,那么可以通过下述方式解决:
    • 返回特殊值,不返回NULL,例如“-1”;
    • 在通过算子获取到了一个RDD之后,可以对这个RDD执行filter操作,进行数据过滤,将数值为-1的数据给过滤掉;
    • 在使用完filter算子后,继续调用coalesce算子进行优化。

故障排除六:解决YARN-CLUSTER模式的JVM栈内存溢出无法执行问题

YARN-cluster模式的运行原理如下图所示:

  • 当Spark作业中包含SparkSQL的内容时,可能会碰到YARN-client模式下可以运行,但是YARN-cluster模式下无法提交运行(报出OOM错误)的情况。

    • YARN-client模式下,Driver是运行在本地机器上的,Spark使用的JVM的PermGen的配置,是本地机器上的spark-class文件,JVM永久代的大小是128MB,这个是没有问题的,但是在YARN-cluster模式下,Driver运行在YARN集群的某个节点上,使用的是没有经过配置的默认设置,PermGen永久代大小为82MB。
    • SparkSQL的内部要进行很复杂的SQL的语义解析、语法树转换等等,非常复杂,如果sql语句本身就非常复杂,那么很有可能会导致性能的损耗和内存的占用,特别是对PermGen的占用会比较大。
  • 所以,此时如果PermGen的占用好过了82MB,但是又小于128MB,就会出现YARN-client模式下可以运行,YARN-cluster模式下无法运行的情况。
  • 解决上述问题的方法时增加PermGen的容量,需要在spark-submit脚本中对相关参数进行设置,设置方法如代码清单所示。
  • 通过–conf spark.driver.extraJavaOptions="-XX:PermSize=128M -XX:MaxPermSize=256M"设置了Driver永久代的大小,默认为128MB,最大256MB,这样就可以避免上面所说的问题。

故障排除七:解决SparkSQL导致的JVM栈内存溢出

  • 当SparkSQL的sql语句有成百上千的or关键字时,就可能会出现Driver端的JVM栈内存溢出。
  • JVM栈内存溢出基本上就是由于调用的方法层级过多,产生了大量的,非常深的,超出了JVM栈深度限制的递归。(我们猜测SparkSQL有大量or语句的时候,在解析SQL时,例如转换为语法树或者进行执行计划的生成的时候,对于or的处理是递归,or非常多时,会发生大量的递归)
  • 此时,建议将一条sql语句拆分为多条sql语句来执行,每条sql语句尽量保证100个以内的子句。根据实际的生产环境试验,一条sql语句的or关键字控制在100个以内,通常不会导致JVM栈内存溢出。

故障排除八:持久化与checkpoint的使用

  • Spark持久化在大部分情况下是没有问题的,但是有时数据可能会丢失,如果数据一旦丢失,就需要对丢失的数据重新进行计算,计算完后再缓存和使用,为了避免数据的丢失,可以选择对这个RDD进行checkpoint,也就是将数据持久化一份到容错的文件系统上(比如HDFS)。
  • 一个RDD缓存并checkpoint后,如果一旦发现缓存丢失,就会优先查看checkpoint数据存不存在,如果有,就会使用checkpoint数据,而不用重新计算。也即是说,checkpoint可以视为cache的保障机制,如果cache失败,就使用checkpoint的数据。
  • 使用checkpoint的优点在于提高了Spark作业的可靠性,一旦缓存出现问题,不需要重新计算数据,缺点在于,checkpoint时需要将数据写入HDFS等文件系统,对性能的消耗较大。

Spark 之 故障排除(二)相关推荐

  1. 排除某个类_Spark Troubleshooting(故障排除)

    1 故障排除一:控制reduce端缓冲大小以避免OOM 在Shuffle过程,reduce端task并不是等到map端task将其数据全部写入磁盘后再去拉取,而是map端写一点数据,reduce端ta ...

  2. Exchange server 2013(十二)IRM故障排除

    Exchange server 2013 (十二)IRM故障排除 我们做完exchange 2013和IRM集成后,具体做法请参考第十章,顺利使用一段时间,后面由于服务器迁移的原因,就把exchang ...

  3. Linux主辅DNS数据不同步故障排除

         Linux主辅dns数据不同步故障排除 欢迎使用微信关注"云运维联盟"公众号,第一时间了解本博客动态! 在互联网中,我们知道任何一台提供应用服务的主机(例如:HTTP.F ...

  4. 网络故障排除连载之一:常用排除方法综述

    一.对网络管理人员的要求 目前互联网络技术.拓扑和应用的复杂性决定了网络管理人员必须: 1.确保网络稳定运行: 2.掌握故障排除方法: 3.熟悉各种协议可能故障点,迅速定位排除故障. 对协议要求有精深 ...

  5. as死机了怎么办_Acer AS574/G开机死机故障排除手记

    ㈠ 故障现象 2012-12-14原本正常工作的机子,在无人值守情况下更新一个系统软件状态,因听不到 blog.sina.com.cn/u235016的背景音乐声(原来有乐声),走近查看时,脑脑屏幕显 ...

  6. 故障排除:硬盘坏道修复术

    故障排除:硬盘坏道修复术 来源: 作者: 发布时间:2008-03-25 计算机中最娇气的部件应该是硬盘了.虽然随着制造工艺的不断进步,这种情况有所转变,一些硬盘厂家如昆腾也发布了相关的新技术,比如昆 ...

  7. 网络工程师面试:简要回答一下故障排除的过程?

    网络工程师面试,不同的公司会有不同的流程和问题,企业文化问题与技术问题都有可能会被问到,下面介绍一下常见的网工面试问题. 1.简要回答一下故障排除的过程? 在这个问题中,面试官想要看到的是你对于解决问 ...

  8. 网络故障排除工具 | 快速定位网络故障

    网络故障排除对于网络技术专家和网络工程师是颇具挑战的工作.每当添加新的设备或网络发生变更时,新的问题就会出现,而且很难确定问题出在哪里.每一位网络工程师或专家都有自己的经验和必备工具,能让他们快速定位 ...

  9. fanuc机器人提示暂停_川崎机器人故障排除参考方法

    川崎机器人故障排除参考方法        首先,第一时间做好系统数据备份工作.了解故障现象,通过现场一些设备的基本现象和现场技术人员的描述进行判断,会比较有效率,. 例如,根据一位现场工程师的描述  ...

最新文章

  1. python路径分隔符_Python:当读取一个没有默认分隔符的文件(包含数百万条记录)并将其放入dataframe (pa-问答-阿里云开发者社区-阿里云...
  2. 软件构造学习笔记-第五周
  3. android 5.0新增 ui 控件,android3.0新增ui控件示例说明.doc
  4. Leetcode每日一题:all-nodes-distance-k-in-binary-tree(二叉树中所有距离为K的节点)
  5. 最新大润发优鲜小程序逆向分析
  6. Maven具体解释之------maven版本号管理
  7. 服务器操作记录21/11/19
  8. 论文阅读4.6-4.8
  9. R语言:关于我国各地区消费水平的聚类分析
  10. 服务器配置Python环境全过程
  11. 【线代】《线性代数的几何意义》——摘录笔记(一)
  12. 微分中的dx和delta x
  13. echarts 折线图
  14. 人脸对齐:Wing Loss人脸关键点检测算法2018
  15. 相见恨晚的5个资源网站 影视音乐资源随你看
  16. letax报错“ I can't write on file `***.pdf”
  17. 提醒:无线路由曝安全漏洞,请关闭WPS功能
  18. 利用feather快速处理大数据
  19. 四位数的可逆素数c语言,求四位的可逆素数。可逆素数指:一个素数将其各位数字的顺序倒过来构成的反序数也是素...
  20. 深圳免费旅游景点大全|深圳旅游攻略(上)

热门文章

  1. 解决DesignMode不能正确反应是否处于设计模式的问题
  2. [恢]hdu 1421
  3. .net 4 环境调用 .net 2 编译的DLL
  4. We're A Happy Family-A Tribute To Ramones
  5. jsp标记之动作标记介绍
  6. IDEA查看Java类的UML关系图
  7. Git Flow分支管理
  8. Mariadb安装及主从搭建,基于centos7
  9. String类常用方法记录
  10. SpringCache 集成 Redis,这才是优雅的缓存解决方案!