spark-submit classNotFoundException

时间:2016-03-18 18:06:11

标签: apache-spark classnotfoundexception

我正在使用maven(使用shade插件)构建一个spark应用程序,并将其scp到数据节点,以便使用spark-submit --deploy-mode集群执行(因为从构建系统直接启动)使用--deploy-mode客户端不起作用,因为不受我控制的非对称网络)。

这是我的启动命令

  

火花提交            - 级测试            - 主纱           --deploy-mode cluster            - 监督           --verbose           jarName.jar           HDFS:///somePath/Test.txt           hdfs:///somePath/Test.out

对于Test $ 1,作业快速失败并出现ClassNotFoundException; java中从我的主类

创建的一个匿名类
  

6/03/18 12:59:41 WARN scheduler.TaskSetManager:阶段失去任务0.0   0.0(TID 0,dataNode3):java.lang.ClassNotFoundException:Test $ 1

我已经多次提到这个错误(谷歌),大多数建议归结为调用conf.setJars(jarPaths)或类似的。

我真的不明白为什么当jarName.jar中缺少的类肯定(我已经检查过)时需要这样做,为什么在编译时指定它比在运行时使用它更好--jar作为spark-submit参数,在任何一种情况下,我应该为jar提供什么路径。我已经从构建系统上的target / jarName.jar将它复制到datanode上的主目录,但似乎spark-submit将它复制到某个地方的hdfs很难确定为硬编码在编译时或启动时的路径名。

最重要的是,为什么不能根据someJar.jar参数自动处理这个问题,如果没有,我应该怎么做才能修复它?

2 个答案:

答案 0 :(得分:0)

Check the answer from here spark submit java.lang.ClassNotFoundException

spark-submit --class Test --master yarn --deploy-mode cluster --supervise --verbose jarName.jar hdfs:///somePath/Test.txt hdfs:///somePath/Test.out

Try to use, also you could check the absolute path in your project

--class com.myclass.Test

答案 1 :(得分:0)

当我尝试以“集群”模式运行它时,我的Scala Spark应用程序也遇到了相同的问题:

--master yarn --deploy-mode cluster

我在this页上找到了解决方案。基本上,我所缺少的(命令中也缺少)是“ --jars”参数,该参数使您可以将应用程序jar分发到集群中。

建议:要解决此类错误,您可以使用以下命令:

yarn logs --applicationId yourApplicationId

yourApplicationId 应该在纱线异常日志中。