Spark 3.3.2升级至3.4.0后K8s部署报NoSuchFileException求助
Spark 3.4.0 K8s部署Jar包找不到问题的原因与解决
Spark 3.4.0在K8s模式下对local://路径的解析逻辑做了明确变更,不少用户升级后都遇到过和你一样的NoSuchFileException问题,核心原因就是路径解析规则的调整。
问题根源
Spark 3.4.0为修复K8s模式下的路径安全漏洞,修改了local://开头路径的解析逻辑:
- Spark 3.3.2及更早版本中,
local:///<path>/xxx.jar会直接映射为容器内的绝对路径/<path>/xxx.jar - Spark 3.4.0中,
local:///的写法不再被识别为绝对路径前缀,解析时会省略第三个斜杠,将local:///<path>/xxx.jar解析为相对路径(相对于Spark工作目录),自然找不到对应文件
验证方式
查看Spark 3.4.0的LocalResourceUtils或KubernetesClientApplication相关源码,能看到路径解析部分的代码变更:原本处理local://前缀时会保留后续的绝对路径,现在会统一处理为相对路径或要求使用正确的绝对路径写法。
解决办法
- 调整路径写法:
两种可行的修改方式二选一:- 去掉
local://后的第三个斜杠,改为local://<path>/spark-assembly-1.0.jar - 直接使用容器内的绝对路径,去掉
local://前缀,写成/<path>/spark-assembly-1.0.jar
- 去掉
- 确认镜像内文件路径:检查Dockerfile中拷贝jar包的命令,确保容器内确实存在
/<path>/spark-assembly-1.0.jar文件,避免因镜像构建错误导致文件缺失
内容的提问来源于stack exchange,提问作者user9920500
相关产品推荐
相关产品推荐

