Spark排错与优化

本文详细介绍了Spark在运维、运行错误、Python错误以及优化方面遇到的问题及解决方案。针对Master挂掉、worker故障、shuffle错误、Executor丢失、数据倾斜、内存溢出等问题,提供了具体的解决策略。此外,还讨论了Python环境配置、任务优化、内存管理、并发设置和数据本地性等方面,为Spark应用的稳定性和性能提升提供指导。
摘要由CSDN通过智能技术生成
转自:http://blog.csdn.net/lsshlsw/article/details/49155087
一. 运维
1. Master挂掉,standby重启也失效

Master默认使用512M内存,当集群中运行的任务特别多时,就会挂掉,原因是master会读取每个task的event log日志去生成spark ui,内存不足自然会OOM,可以在master的运行日志中看到,通过HA启动的master自然也会因为这个原因失败。

解决
  1. 增加Master的内存占用,在Master节点spark-env.sh 中设置:

     export SPARK_DAEMON_MEMORY 10g # 根据你的实际调整
  2. 减少保存在Master内存中的作业信息

     spark.ui.retainedJobs 500   # 默认都是1000
     spark.ui.retainedStages 500
2. worker挂掉或假死

有时候我们还会在web ui中看到worker节点消失或处于dead状态,在该节点运行的任务则会报各种 lost worker 的错误,引发原因和上述大体相同,worker内存中保存了大量的ui信息导致gc时失去和master之间的心跳。

解决
  1. 增加Master的内存占用,在Worker节点spark-env.sh 中设置:

     export SPARK_DAEMON_MEMORY 2g # 根据你的实际情况
  2. 减少保存在Worker内存中的Driver,Executor信息

     spark.worker.ui.retainedExecutors 200   # 默认都是1000
     spark.worker.ui.retainedDrivers 200
二. 运行错误
1.shuffle FetchFailedException

Spark Shuffle FetchFailedException解决方案

错误提示
  1. missing output location

     org.apache.spark.shuffle.MetadataFetchFailedException: 
     Missing an output location for shuffle 0

    missing output location

  2. shuffle fetch faild

     org.apache.spark.shuffle.FetchFailedException:
     Failed to connect to spark047215/192.168.47.215:50268

    shuffle fetch faild

    当前的配置为每个executor使用1core,5GRAM,启动了20个executor

解决

这种问题一般发生在有大量shuffle操作的时候,task不断的failed,然后又重执行,一直循环下去,直到application失败。

faild

一般遇到这种问题提高executor内存即可,同时增加每个executor的cpu,这样不会减少task并行度。

  • spark.executor.memory 15G
  • spark.executor.cores 3
  • spark.cores.max 21

启动的execuote数量为:7个

execuoterNum = spark.cores.max/spark.executor.cores

每个executor的配置:

3core,15G RAM

消耗的内存资源为:105G RAM

15G*7=105G

可以发现使用的资源并没有提升,但是同样的任务原来的配置跑几个小时还在卡着,改了配置后几分钟就能完成。

2.Executor&Task Lost
错误提示
  1. executor lost

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值