【问题标题】:spark-submit classNotFoundException火花提交类NotFoundException
【发布时间】:2016-03-18 18:06:10
【问题描述】:

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

这是我的启动命令

火花提交 --class 测试 ——主纱 --deploy-mode 集群 - 监督 --详细 jarName.jar hdfs:///somePath/Test.txt hdfs:///somePath/Test.out

作业很快失败,Test$1 出现 ClassNotFoundException; java 从我的主类创建的匿名类之一

6/03/18 12:59:41 WARN scheduler.TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, dataNode3): java.lang.ClassNotFoundException: Test$1

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

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

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

【问题讨论】:

  • 刚刚尝试在云雀上使用 --deployMode 客户端,它成功了!我真的不明白这个。
  • 我相信 Spark 找不到你的 jar。您的 jar 是否存在于每个节点中?您是否尝试指定 jar 的绝对路径?

标签: apache-spark classnotfoundexception


【解决方案1】:

从这里检查答案 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

尝试使用,也可以查看项目中的绝对路径

--class com.myclass.Test

【讨论】:

    【解决方案2】:

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

    --master yarn --deploy-mode cluster
    

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

    建议:为了能够解决此类错误,您可以使用以下命令:

    yarn logs --applicationId yourApplicationId
    

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

    【讨论】:

      猜你喜欢
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 2017-11-24
      • 2019-11-13
      • 2020-04-05
      • 1970-01-01
      相关资源
      最近更新 更多