Spark项目troubleshooting

一、控制shuffle reduce端缓冲大小避免OOM
reduce端缓冲可能出的问题?

如果map端的数据量特别大,写出速度特别快,reduce端所有task拉取的时候都达到自己缓冲的最大极限值,48M。
这个时候再加上reduce端执行代码时创建的对象,很可能出现OOM问题。

如何解决?
减少reduce端缓冲大小,这样就会多次拉取,而不会造成内存溢出。降低了性能但保证了程序能够正常运行。

spark.reducer.maxSizeInFilght

二、JVM GC导致的shuffle文件拉取失败
拉取失败的原因:reduce端的executor在要去拉取map端数据的时候要跟map端的executor建立连接,但map端的executor可能在进行GC导致连接失败。

spark.shuffle.maxRetries 3 reduce端重新拉取文件的次数。
spark.shuffle.io.retryWait 5s每次重试拉取文件的时间间隔

三、YARN队列资源不足导致的application直接失败
解决方案:
1.在提交作业时,确保只有一个spark作业提交到yarn上去执行,确保一个spark作业的资源是有的
2.采用一些简单的调度区分方式,创建两个调度队列,需要长时间运行的作业在一个队列中,短时间运行的作业在一个队列中
3.如果在队列中只有一个spark作业,name要保证队列中的资源要充分利用,调节并行度。

四、解决序列化导致的报错
1、在算子函数中,用到了外部自定义类型的变量,要求自定义的类型是可序列化的。
2、如果要将自定义的类型,作为RDD的元素类型,那么自定义的类型也必须是可序列化的
3、不能使用第三方不可序列化的类型

五、算子函数中返回NULL
在这里插入图片描述
六、yarn-client模式导致的网卡流量激增问题
task太多,本地driver要跟executor进行同通信是时会导致网卡流量激增。driver就是自己本地提交做作业的机器

在这里插入图片描述
七、yarn-cluster模式的JVM栈内存溢出无法执行
yarn-cluster模式的driver是applicationMaster进程
applicationMaster会向resourceManager申请executor,
resourceManager会分配container给applicationMaster
applicationMaster会找对应的nodemanager申请启动executor,executor进程会找applicationMaster进行反向注册

错误出现原因:在yarn-client模式下,JVM 的permGen(永久代)的默认内存大小是128M,在yarn-cluster模式下默认内存大小是82M,导致可能在测试时能够正常运行,生产环境下却不能正常运行,就会爆出permGen out of memory error log.

如何解决?
在spark-submit脚本中加入配置: --conf spark.driver.extraJavaOptions="-XX:PermSize=128M -XX:MaxPermSize=256M"

八、错误的持久化方式以及checkpoint的使用
错误的持久化方式:userRDD.cache
正确的持久化方式:userRDD = userRDD.cache

checkpoint有利有弊,提高了spark作业的可靠性,但消耗了性能。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值