Spark-submit提交Fat Jar提示Jar不存在致主类加载失败求助
环境信息
- 系统:Windows 10/Linux Ubuntu 8 LTS
- Spark版本:3.3.0 (spark-3.3.0-bin-hadoop3)
问题描述
使用spark-submit提交Fat Jar时,Jar文件实际存在,但收到DependencyUtils的“jar does not exists”警告,最终导致主类<packagename>.Application加载失败。
执行命令
bin\spark-submit --verbose --master local --class <packagename>.Application --executor-memory 800m C:\<path to project>\target\scala-2.12\ProjectName.jar
执行结果
Using properties file: null Parsed arguments: master local deployMode null executorMemory 800m executorCores null totalExecutorCores null propertiesFile null driverMemory null driverCores null driverExtraClassPath null driverExtraLibraryPath null driverExtraJavaOptions null supervise false queue null numExecutors null files null pyFiles null archives null mainClass <packagename>.Application primaryResource file:/C:<path to project>target/scala-2.12/ProjectName.jar name <packagename>.Application childArgs [] jars null packages null packagesExclusions null repositories null verbose true Spark properties used, including those specified through --conf and those from the properties file null: Main class: <packagename>.Application Arguments: Spark config: (spark.app.name,<packagename>.Application) (spark.app.submitTime,1664225037825) (spark.jars,file:/C:<path to project>/target/scala-2.12/ProjectName.jar) (spark.master,local) (spark.submit.deployMode,client) (spark.submit.pyFiles,) Classpath elements: file:/C:<path to project>/target/scala-2.12/PrrojectName.jar 22/09/26 22:43:57 WARN DependencyUtils: Local jar C:<path to project>\target\scala-2.12\ProjectName.jar does not exist, skipping. Error: Failed to load class <packagename>.Application. 22/09/26 22:43:57 INFO ShutdownHookManager: Shutdown hook called
解决建议
- 修正路径格式与拼写:从日志可见,Spark解析后的Jar路径缺失盘符斜杠(
file:/C:<path to project>target...应为file:/C:/<path to project>/target...),Windows下建议将路径中的反斜杠改为正斜杠,或用双引号包裹路径,避免解析错误。例如:bin\spark-submit --verbose --master local --class <packagename>.Application --executor-memory 800m "C:/<path to project>/target/scala-2.12/ProjectName.jar" - 检查Jar文件名拼写:日志中Classpath显示的文件名是
PrrojectName.jar(多了一个字母r),确认本地Jar文件的实际名称,保证命令中的文件名与实际完全一致。 - 验证路径有效性:先在命令行执行
dir C:\<path to project>\target\scala-2.12\ProjectName.jar(Windows)或ls <Jar路径>(Linux),确认Jar文件确实存在且路径无误,再将验证后的完整路径代入spark-submit命令。 - 调整命令格式:原命令存在换行拆分参数的情况,可能导致参数解析异常,建议将命令整合为一行,确保参数与值的对应关系正确。
- Linux环境权限检查:若在Ubuntu下运行,确保当前用户对Jar文件及所在目录拥有读权限,必要时执行
chmod +r <Jar文件路径>添加权限。
内容的提问来源于stack exchange,提问作者LorenzoGi
相关产品推荐
相关产品推荐

