spark-submit运行报Missing application resource及找不到构建目录问题咨询
问题根因
java.lang.IllegalArgumentException: Missing application resource报错直接原因:spark-submit命令参数使用错误,--py-files为依赖文件传递参数,仅用于分发Python依赖到集群工作节点,不能代替主应用入口文件的位置参数,当前命令未在所有参数末尾指定主应用资源,Spark无法识别需要执行的应用入口。java.lang.IllegalStateException: Cannot find any build directories报错直接原因:手动拼接Java命令直接调用Spark Launcher类属于非标准执行方式,未传递Spark部署所需的环境标识参数,Launcher无法匹配当前Spark的编译版本与目录结构,该问题属于非规范操作导致的预期外错误,无需优先排查。- 潜在风险:当前环境变量中配置的py4j版本为0.10.3,仅适配Spark 2.1.x版本,若实际部署的Spark版本与该版本不匹配,后续运行会抛出类加载异常。
解决方案
- 修正spark-submit命令格式,将主应用文件作为位置参数放在所有参数末尾:
bash -x $SPARK_HOME/bin/spark-submit --master spark://analytics-seed:7077 $SPARK_HOME/hello_world.py
如果主应用存在额外的依赖Python文件需要分发,再补充--py-files参数传递依赖,示例如下:
# 示例:主应用依赖utils.py,通过--py-files传递依赖,末尾指定主应用入口 bash -x $SPARK_HOME/bin/spark-submit --master spark://analytics-seed:7077 --py-files $SPARK_HOME/utils.py $SPARK_HOME/hello_world.py
- 校验py4j版本匹配性:进入
$SPARK_HOME/python/lib目录,查看实际存在的py4j压缩包文件名,将环境变量中配置的py4j路径替换为实际路径后,重新source环境变量配置文件即可。 - 若修正命令后仍有报错,可先通过local模式验证本地环境有效性,排除集群连接类问题:
$SPARK_HOME/bin/spark-submit --master local[1] $SPARK_HOME/hello_world.py
内容的提问来源于stack exchange,提问作者Animesh Srivastava
相关产品推荐
相关产品推荐

