【问题标题】:spark submit java.lang.ClassNotFoundException火花提交 java.lang.ClassNotFoundException
【发布时间】:2015-11-06 03:41:59
【问题描述】:

我正在尝试运行我自己的 spark 应用程序,但是当我使用 spark-submit 命令时出现以下错误:

Users/_name_here/dev/sp/target/scala-2.10/sp_2.10-0.1-SNAPSHOT.jar --stacktrace
java.lang.ClassNotFoundException:        /Users/_name_here/dev/sp/mo/src/main/scala/MySimpleApp
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:340)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:633)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:169)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:192)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:111)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

我正在使用以下命令:

/Users/_name_here/dev/spark/bin/spark-submit 
--class "/Users/_name_here/dev/sp/mo/src/main/scala/MySimpleApp" 
--master local[4] /Users/_name_here/dev/sp/target/scala-2.10/sp_2.10-0.1-SNAPSHOT.jar 

我的 build.sb 看起来像这样:

name := "mo"

version := "1.0"

scalaVersion := "2.10.4"


libraryDependencies ++= Seq(
  "org.apache.spark"          % "spark-core_2.10"   %    "1.4.0",
  "org.postgresql"            % "postgresql"        %    "9.4-1201-jdbc41",
  "org.apache.spark"          % "spark-sql_2.10"    %    "1.4.0",
  "org.apache.spark"          % "spark-mllib_2.10"  %    "1.4.0",
  "org.tachyonproject"        % "tachyon-client"    %    "0.6.4",
  "org.postgresql"            % "postgresql"        %    "9.4-1201-jdbc41",
  "org.apache.spark"          % "spark-hive_2.10"   %    "1.4.0",
  "com.typesafe"              % "config"            %    "1.2.1"
)

resolvers += "Typesafe Repo" at "http://repo.typesafe.com/typesafe/releases/"

我的插件.sbt:

logLevel := Level.Warn

resolvers += "Sonatype snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/"

addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0")
addSbtPlugin("com.eed3si9n" % "sbt-assembly"  %"0.11.2")

我正在使用 spark.apache.org 的 prebuild 包。我通过 brew 和 scala 安装了 sbt。从 spark 根文件夹运行 sbt 包工作正常,它创建了 jar,但使用程序集根本不起作用,可能是因为它在重建 spark 文件夹中丢失。我会很感激任何帮助,因为我对火花很陌生。哦,顺便说一句,spark 在 IntelliJ 中运行良好

【问题讨论】:

    标签: macos scala intellij-idea apache-spark sbt


    【解决方案1】:

    你不应该通过它的目录路径来引用你的类,而是通过它的包路径。示例:

    /Users/_name_here/dev/spark/bin/spark-submit 
    --master local[4]
    --class com.example.MySimpleApp /Users/_name_here/dev/sp/target/scala-2.10/sp_2.10-0.1-SNAPSHOT.jar
    

    据我所知,您的任何包中都没有 MySimpleApp,所以“--class MySimpleApp”应该可以工作。

    【讨论】:

    • 很遗憾,我仍然遇到同样的错误信息
    • 你能粘贴 MySimpleApp 吗?它的包装是什么?
    【解决方案2】:

    显然,我的项目结构总体上肯定有问题。因为我用 sbt 和 sublime 创建了一个新项目,现在我可以使用 spark-submit。但这真的很奇怪,因为我没有对 intelliJ 中提供的 sbt-project 的默认结构进行任何更改。这是现在的项目结构,就像一个魅力:

    Macbook:sp user$ find .
    .
    ./build.sbt
    ./project
    ./project/plugin.sbt
    ./src
    ./src/main
    ./src/main/scala
    ./src/main/scala/MySimpleApp.scala
    

    感谢您的帮助!

    【讨论】:

      【解决方案3】:

      问题是因为您输入了不正确的 --class 参数

      1. 如果您使用 Java maven 项目,请确保您输入了正确的类路径 --class "/Users/_name_here/dev/sp/mo/src/main/scala/MySimpleApp" 它应该喜欢 com.example.myclass 这种格式。奥尔多可能是 --class myclass

      2. 这里有很多关于 Spark 提交的例子。

        在 8 个内核上本地运行应用程序

        ./bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --主本地[8] \ /path/to/examples.jar \ 100

        以客户端部署模式在 Spark 独立集群上运行

        ./bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --主火花://207.184.161.138:7077 \ --executor-memory 20G \ --total-executor-cores 100 \ /path/to/examples.jar \ 1000

        在具有监督的集群部署模式下在 Spark 独立集群上运行

        ./bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --主火花://207.184.161.138:7077 \ --部署模式集群\ --监督\ --executor-memory 20G \ --total-executor-cores 100 \ /path/to/examples.jar \ 1000

        在 YARN 集群上运行

        导出 HADOOP_CONF_DIR=XXX ./bin/spark-提交\ --class org.apache.spark.examples.SparkPi \ --主纱\ --deploy-mode cluster \ # 可以是客户端为客户端模式 --executor-memory 20G \ --num-executors 50 \ /path/to/examples.jar \ 1000

        在 Spark 独立集群上运行 Python 应用程序

        ./bin/spark-submit \ --主火花://207.184.161.138:7077 \ 示例/src/main/python/pi.py \ 1000

        在集群部署模式下在 Mesos 集群上运行并进行监督

        ./bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master mesos://207.184.161.138:7077 \ --部署模式集群\ --监督\ --executor-memory 20G \ --total-executor-cores 100 \ http://path/to/examples.jar\ 1000

      【讨论】:

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