Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala spark提交错误:ClassNotFoundException_Scala_Apache Spark_Spark Submit - Fatal编程技术网

Scala spark提交错误:ClassNotFoundException

Scala spark提交错误:ClassNotFoundException,scala,apache-spark,spark-submit,Scala,Apache Spark,Spark Submit,build.sbt lazy val commonSettings = Seq( organization := "com.me", version := "0.1.0", scalaVersion := "2.11.0" ) lazy val counter = (project in file("counter")). settings(commonSettings:_*) counter/build.sbt name := "counter" mainC

build.sbt

lazy val commonSettings = Seq(
    organization := "com.me",
    version := "0.1.0",
    scalaVersion := "2.11.0"
)

lazy val counter = (project in file("counter")).
    settings(commonSettings:_*)
counter/build.sbt

name := "counter"
mainClass := Some("Counter")
scalaVersion := "2.11.0"

val sparkVersion = "2.1.1";

libraryDependencies += "org.apache.spark" %% "spark-core" % sparkVersion % "provided";
libraryDependencies += "org.apache.spark" %% "spark-sql" % sparkVersion % "provided";
libraryDependencies += "org.apache.spark" %% "spark-streaming" % sparkVersion % "provided";

libraryDependencies += "com.datastax.spark" %% "spark-cassandra-connector" % "2.0.2";
libraryDependencies += "org.apache.spark" %% "spark-streaming-kafka-0-8" % sparkVersion;

libraryDependencies += "com.github.scopt" %% "scopt" % "3.5.0";

libraryDependencies += "org.scalactic" %% "scalactic" % "3.0.1";
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test";

mergeStrategy in assembly := {
  case PathList("org", "apache", "spark", "unused", "UnusedStubClass.class") => MergeStrategy.first
  case x => (mergeStrategy in assembly).value(x)
}
counter.scala:

object Counter extends SignalHandler
{
    var ssc : Option[StreamingContext] = None;
    def main( args: Array[String])

错误:

17/06/21 19:00:25 INFO Utils: Successfully started service 'Driver' on port 50140.
17/06/21 19:00:25 INFO WorkerWatcher: Connecting to worker spark://Worker@10.1.204.57:52476
Exception in thread "main" java.lang.ClassNotFoundException: Counter
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.apache.spark.util.Utils$.classForName(Utils.scala:229)
    at org.apache.spark.deploy.worker.DriverWrapper$.main(DriverWrapper.scala:56)
    at org.apache.spark.deploy.worker.DriverWrapper.main(DriverWrapper.scala)
有什么想法吗?谢谢

更新

我这里有问题。现在,我将jar复制到
spark-2.1.0-bin-hadoop2.7/bin
中,然后运行
/spark submit--class“Counter”-masterspark://10.1.204.67:6066 --部署模式群集file://Counter-assembly-0.1.0.jar

火花点火器总成为2.1.0

但是jar是在2.1.1和Scala 2.11.0中组装的。

您似乎刚刚开始使用Scala开发Spark应用程序,因此,为了帮助您和其他未来的Spark开发人员,我希望为您提供足够的步骤来适应环境

项目生成配置-Build.sbt 似乎您使用了多项目sbt构建,这就是为什么您有两个
build.sbt
s。为了解决您的问题,我会假装您不使用此高级sbt设置

您似乎使用了Spark Streaming,因此将其定义为依赖项(如
libraryDependencies
)。您不必定义其他Spark依赖项(如
Spark core
Spark sql

您应该有
build.sbt
,如下所示:

organization := "com.me"
version := "0.1.0"
scalaVersion := "2.11.0"
val sparkVersion = "2.1.1"
libraryDependencies += "org.apache.spark" %% "spark-streaming" % sparkVersion % "provided"
构建可部署包 使用上面的
build.sbt
,您可以执行
sbt包
来构建一个可部署的Spark应用程序包,并最终
Spark将其提交给Spark群集

您还不必为此使用
sbt assembly
。我可以看到您使用Spark Cassandra连接器和其他依赖项,这些依赖项也可以使用
--packages
--jars
来定义(它们本身有其优缺点)

最终的
target/scala-2.11/counter_2.11-0.1.0.jar
的大小将比使用
sbt-assembly
构建的
counter-assembly-0.1.0.jar
小得多,因为
sbt-package
在单个jar文件中不包含依赖项。这是意料之中的事

提交Spark应用程序-Spark提交 在
sbt包
之后,您应该在
target/scala-2.11
中将可部署包作为
counter-assembly-0.1.0.jar

您只需
spark提交
,提交所需选项,在您的情况下,这些选项将是:

spark-submit \
  --master spark://10.1.204.67:6066
 target/scala-2.11/counter-assembly-0.1.0.jar
就这样


请注意:

  • --部署模式集群
    对于本练习来说太高级了(让我们保持简单,并在需要时将其带回来)

  • 文件://
    使东西破碎(或至少是多余的)

  • --class“Counter”
    sbt包
    在您执行的项目中有一个Scala应用程序时负责。你可以放心地跳过它

  • 您似乎刚刚开始使用Scala开发Spark应用程序,因此,为了帮助您和其他未来的Spark开发人员,我希望为您提供足够的步骤来适应环境

    项目生成配置-Build.sbt 似乎您使用了多项目sbt构建,这就是为什么您有两个
    build.sbt
    s。为了解决您的问题,我会假装您不使用此高级sbt设置

    您似乎使用了Spark Streaming,因此将其定义为依赖项(如
    libraryDependencies
    )。您不必定义其他Spark依赖项(如
    Spark core
    Spark sql

    您应该有
    build.sbt
    ,如下所示:

    organization := "com.me"
    version := "0.1.0"
    scalaVersion := "2.11.0"
    val sparkVersion = "2.1.1"
    libraryDependencies += "org.apache.spark" %% "spark-streaming" % sparkVersion % "provided"
    
    构建可部署包 使用上面的
    build.sbt
    ,您可以执行
    sbt包
    来构建一个可部署的Spark应用程序包,并最终
    Spark将其提交给Spark群集

    您还不必为此使用
    sbt assembly
    。我可以看到您使用Spark Cassandra连接器和其他依赖项,这些依赖项也可以使用
    --packages
    --jars
    来定义(它们本身有其优缺点)

    最终的
    target/scala-2.11/counter_2.11-0.1.0.jar
    的大小将比使用
    sbt-assembly
    构建的
    counter-assembly-0.1.0.jar
    小得多,因为
    sbt-package
    在单个jar文件中不包含依赖项。这是意料之中的事

    提交Spark应用程序-Spark提交 在
    sbt包
    之后,您应该在
    target/scala-2.11
    中将可部署包作为
    counter-assembly-0.1.0.jar

    您只需
    spark提交
    ,提交所需选项,在您的情况下,这些选项将是:

    spark-submit \
      --master spark://10.1.204.67:6066
     target/scala-2.11/counter-assembly-0.1.0.jar
    
    就这样


    请注意:

  • --部署模式集群
    对于本练习来说太高级了(让我们保持简单,并在需要时将其带回来)

  • 文件://
    使东西破碎(或至少是多余的)

  • --class“Counter”
    sbt包
    在您执行的项目中有一个Scala应用程序时负责。你可以放心地跳过它


  • 你试过将counter.scala重命名为counter.scala吗?@TomLous没有。我会的try@TomLous刚才,我试过了,没有工作嗯,很难说没有整个项目。尽管有一些小建议/不需要的建议(可能不会有帮助,但还是在这里)。1.不要使用scala 2.11.0,而是使用2.11.11.2。在scala(非常Java)3中不要使用分号。为什么有2个build.sbt文件。对于这样一个小项目,1美元应该足够了吗?4.在src/main/scala/文件夹5中重新组织代码。不要使用var(不太FP)。很抱歉,我无法帮助您,但是如果您可以通过github共享项目代码,或者我或其他人可以快速查看它?我打赌这是因为您使用
    file://counter-assembly-0.1.0.jar
    not
    target/scala-2.11/counter-assembly-0.1.0.ja