我正在尝试将Spark应用程序从位于S3中的jar文件部署到正在运行的EMR集群。如果我将master
设置为local[*]
(在客户端或群集模式下部署时),我可以获得正确的执行。但是,只要删除它,我就会在群集中的两个从属节点上出现此错误:
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.package.other.App$
这是我试图在AWS Add Step对话框中运行的命令:
spark-submit --master yarn --deploy-mode cluster --class com.package.other.App s3://bucket/dir/my-assembly-1.0-SNAPSHOT.jar
我已经检查了Spark History Server Web UI中的环境选项卡,我看到了这一行:
spark.jars file:/tmp/tmp8304655502438853488/dir/my-assembly-1.0-SNAPSHOT.jar
在Yarn executor启动上下文的日志中:
resources:
__app__.jar -> resource { scheme: "hdfs" host: "XXXXX.ec2.internal" port: PORT file: "/user/hadoop/.sparkStaging/application_1505928232504_0022/my-assembly-1.0-SNAPSHOT.jar" }
难道不是说这些节点上可以访问主类吗?我已经尝试在群集主节点上本地运行spark-submit并引用复制到主节点的jar文件,但我得到了同样的错误。