问题现象:spark应用能正常计算得到结果,但是查看executor有很多是dead,如下图
查看executor stderr日志发现有错误日志:ERROR executor.CoarseGrainedExecutorBackend: RECEIVED SIGNAL TERM
除此之外没有其他任何错误信息
问题原因:
由于使能动态资源分配executors数(spark.dynamicAllocation.enabled=true),因此当executor空闲时间达到 spark.dynamicAllocation.executorIdleTimeout=60s的时间后,executor会被移除掉。查看driver端的info日志可得到答案,如下截图
解决方法一:
spark.dynamicAllocation.enabled=false,关闭动态分配executors数
解决方法二:
不用理会这个错误,知道是spark on yarn上正常的机制即可。--- 务必要注意是仅有这个错误日志,而应用正常哈,如果还有其他错误日志就要具体分析了