Spark 3.3.0仍遇FileNotFoundException,与PR#29350矛盾求助
问题分析与解决方案
可能的原因
- 新旧版本SHS日志元数据冲突:你的环境同时运行Spark 2.4.5和3.3.0的History Server,两个版本对事件日志的索引、元数据存储逻辑存在差异。2.4.5的SHS处理日志时,可能遗留了对
.inprogress文件的无效引用(比如应用完成后未正确更新元数据),3.3.0的SHS扫描到这些旧元数据时,仍会尝试查找已不存在的.inprogress文件,触发FileNotFoundException。 - PR修复范围不匹配:你提到的PR主要解决Spark滚动生成事件日志过程中,SHS找不到当前正在写入的
.inprogress文件的问题,但你的场景是旧版本日志残留无效引用,不在该PR的修复覆盖范围内。 - 大规模日志扫描异常:LOG_DIR存有7万份日志,SHS扫描时可能出现索引缓存不一致、部分日志解析不完整的情况,导致错误引用已被清理或重命名的
.inprogress文件。
解决方法
- 清理无效元数据并重建索引
- 停止3.3.0版本的SHS。
- 删除LOG_DIR下的
.spark-history目录(这是SHS存储索引的默认目录)。 - 重启3.3.0的SHS,让它重新扫描所有日志文件,生成全新的索引。
- 隔离新旧版本日志目录
将已完成的Spark应用日志迁移到独立目录,专供3.3.0的SHS读取,避免和2.4.5的SHS共享同一个日志目录,防止元数据互相干扰。 - 修复残留的.inprogress文件
检查LOG_DIR中是否存在已完成应用对应的.inprogress文件(应用已结束但文件未被重命名),手动将这类文件重命名为标准事件日志格式(去掉.inprogress后缀)。 - 校验日志完整性
针对无法被查看的应用,确认其对应的事件日志文件是否完整,若存在缺失,可从集群其他节点(如有日志副本)补充完整。
内容的提问来源于stack exchange,提问作者AppleCEO
相关产品推荐
相关产品推荐

