运行Spark任务发现大量shuffle结果丢失
问题现象
Spark任务运行失败,查看任务日志发现大量打印shuffle文件丢失。
原因分析
Spark运行的时候会将临时产生的shuffle文件放在executor的临时目录中,方便后面获取。
而当某个executor异常退出时,NodeManager会把这个executor所在的container临时目录删除,随后其他executor再来申请这个executor的shuffle结果就会报文件找不到。
因此,遇到这样的问题需要确认是否executor异常退出,可以根据spark任务页面的executors便签页查看是否有dead状态的executor,查看各个dead状态的executor日志,确认异常退出的原因(其中可能有部分executor退出原因就是因为shuffle文件找不到,需要找到最早异常退出的executor)。
常见的异常退出:
- executor发生OOM
- executor运行时出现多个task任务失败
- executor所在节点被清理
处理步骤
根据executor异常退出的实际原因调整或者修改任务参数或代码,重新运行Spark任务即可。