共计 666 个字符,预计需要花费 2 分钟才能阅读完成。
昨晚一直在运行的spark任务出现了异常,运行了这么久恰恰这个时候出现了异常。
最直观的现象就是任务出现延迟,小时级数据没有正常生成。
首先去yarn的界面看了下,发现lost node 很多,找运维确认下是不是这个问题,运维说是resource manager 没有重启,只是界面显示的问题,对任务的运行没有影响,排除这个因素之后就去看下详细的日志。
日志里面出现的错误分三类:
1、hbase 连接异常
2、java.nio异常
3、Disk Exception 看起来是硬盘问题
4、shuffle 异常
1、3 很快就排除了,hbase 的压力没那么大,HDFS我们还有几百个T存储资源,所以没啥问题。
剩下 2、4 其实4的问题影响最大,异常的时候是高峰期,shuffle 又是很耗资源的Operation。
但是运行这么久偏偏今天出问题不太理解。
找了Spark值班人,帮忙定位下问题,最终确认了三点:
spark.speculation
这个参数我们设置的为True, 这个参数是关于Spark推测执行机制的相关参数。此参数设定是否使用推测执行机制,如果设置为true则spark使用推测执行机制,对于Stage中拖后腿的Task在其他节点中重新启动,并将最先完成的Task的计算结果最为最终结果
其实是比较耗费资源的,建议关闭。
spark.shuffle.memoryFraction=0.2
这个参数设置的比较小,导致shuffle时内存不够,没事还是不要设置,默认0.6
最后一个参数
deploy mode
这个参数设置为 cluster ,之前没设置是为了看日志方便。