SparkStreaming示例中的ClassNotFoundException

时间:2017-07-31 11:59:54

标签: scala apache-spark spark-streaming

我是Spark流媒体的新手,并尝试从this教程运行示例,我正在关注制作并运行我们自己的NETWORKWORDCOUNT 。 我完成了第8步并从sbt做了一个罐子。

现在我尝试使用第9步中的命令运行部署我的jar:

bin/spark-submit --class "NetworkWordCount" --master spark://abc:7077 target/scala-2.11/networkcount_2.11-1.0.jar localhost 9999

但是当我运行此命令时,我得到以下异常:

  

java.lang.ClassNotFoundException:NetworkWordCount     在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 at   org.apache.spark.deploy.SparkSubmit $ .ORG $阿帕奇$火花$部署$ SparkSubmit $$ runMain(SparkSubmit.scala:700)     在   org.apache.spark.deploy.SparkSubmit $ .doRunMain $ 1(SparkSubmit.scala:187)     在org.apache.spark.deploy.SparkSubmit $ .submit(SparkSubmit.scala:212)     在org.apache.spark.deploy.SparkSubmit $ .main(SparkSubmit.scala:126)     在org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

我创建的

jar包含" NetworkWordCount" 类,其中包含来自spark示例的以下代码

package src.main.scala

import org.apache.spark.SparkConf
import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.{Seconds, StreamingContext}

object NetworkWordCount {
  def main(args: Array[String]) {
    if (args.length < 2) {
      System.err.println("Usage: NetworkWordCount <hostname> <port>")
      System.exit(1)
    }

    //StreamingExamples.setStreamingLogLevels()

    // Create the context with a 1 second batch size
    val sparkConf = new SparkConf().setAppName("MyNetworkWordCount")
    val ssc = new StreamingContext(sparkConf, Seconds(1))

    val lines = ssc.socketTextStream(args(0), args(1).toInt, StorageLevel.MEMORY_AND_DISK_SER)
    val words = lines.flatMap(_.split(" "))
    val wordCounts = words.map(x => (x, 1)).reduceByKey(_ + _)
    wordCounts.print()
    ssc.start()
    ssc.awaitTermination()
  }
}

我无法确定我做错了什么。

2 个答案:

答案 0 :(得分:2)

spark-submit参数--class采用完全限定的类名。 对于上面的代码,它应该是src.main.scala.NetworkCount

bin/spark-submit --class src.main.scala.NetworkCount --master spark://abc:7077 target/scala-2.11/networkcount_2.11-1.0.jar localhost 9999

注意:使用的包名称看起来像IDE设置问题。 src/main/scalascala代码库的典型根,而不是包名。

答案 1 :(得分:0)

确保在执行spark-submit时在当前目录中有“target / scala-2.11 / networkcount_2.11-1.0.jar”文件