spark任务执行过程中经常性的failed但是任务并没有失败最后总能跑完

Posted 格格巫 MMQ!!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spark任务执行过程中经常性的failed但是任务并没有失败最后总能跑完相关的知识,希望对你有一定的参考价值。

1.现象场景:在spark执行程序中会看到很多的failed但是过程能正常执行完

spark任务执行过程中经常性的failed但是任务并没有失败最后总能跑完

查看如下:ExecutorLostFailure (executor 11 exited caused by one of the running tasks) Reason: Executor heartbeat timed out after 941664 ms

spark任务执行过程中经常性的failed但是任务并没有失败最后总能跑完

表面现象的问题是直接某个机器由于心跳超时,超过一定时间没有向master发送心跳,导致master认为该机器节点挂掉,然后将任务放到别的机器上计算导致的。实际上引发没有心跳的原因有很多。具体情况具体分析。

1.该台机器任务太多cpu被占用满,导致没有资源发送心跳,这个时候就需要设置一下excutor 的内存和cpu的占用以及shul数量,查看一下yarn-site.xml的配置,看一下是否是超出了这台机器资源范围导致了这个问题,

2.该台机器分配的内存过少(堆栈内存)导致频繁gc或者写入磁盘导致时间过长,超过心跳时间导致失败。这时候直接配置

spark.yarn.executor.memoryOverhead 这个参数,增加每一个excutor的内存。或者通过spark.memory.storageFraction设置堆和栈的比平衡

3.由于计算数据量或者文件量过大,导致该节点超时问题,这个时候也可以同1一样,增加并发量 提交num-executors 以及减少executor-cores和executor-memory 来在资源消耗不增加的情况下提高 并发量。

4.万金油方法就是提高超时检测时间。通过设置spark.network.timeout 和 spark.executor.heartbeatInterval 来增加心跳超时机制从而减少失败数量,只要不是机器挂掉总能跑完不是…当然官方建议spark.executor.heartbeatInterval应该大大小于spark.network.timeout 。

以上是关于spark任务执行过程中经常性的failed但是任务并没有失败最后总能跑完的主要内容,如果未能解决你的问题,请参考以下文章

Spark 报错 Failed to delete: C:UserslvaczAppDataLocalTempspark-*

spark任务运行过程的源码分析

Spark 执行模型与性能调优,文末留言免费获取《Spark:大数据集群计算的生产实践》

idea控制台输出0:fail0:error

Spark-2.0原理分析-shuffle过程

01.异常捕获