如何使用spark-streaming-kafka-0-8依赖项来激发提交Spark Streaming应用程序?

时间:2017-03-24 05:04:49

标签: apache-spark apache-kafka spark-streaming

我想要运行spark streaming示例: Directkafkawordcount.scala

要创建jar,我使用带有插件的“build.sbt”:

     name := "Kafka Direct"

version := "1.0"

scalaVersion := "2.11.6"

libraryDependencies ++= Seq ("org.apache.spark" % "spark-streaming-kafka-0-8_2.11" % "2.1.0",
"org.apache.spark" % "spark-streaming_2.11" % "2.1.0",
"org.apache.spark" % "spark-core_2.11" % "2.1.0"  exclude("com.esotericsoftware.minlog", "minlog")
)
resolvers ++= Seq(
    "Maven Central" at "https://repo1.maven.org/maven2/"
)



 mergeStrategy in assembly := {
  case m if m.toLowerCase.endsWith("manifest.mf")          =>     MergeStrategy.discard
  case m if m.toLowerCase.matches("meta-inf.*\\.sf$")      =>     MergeStrategy.discard
  case "log4j.properties"                                  =>     MergeStrategy.discard
  case m if m.toLowerCase.startsWith("meta-inf/services/") =>     MergeStrategy.filterDistinctLines
  case "reference.conf"                                    =>     MergeStrategy.concat
  case _                                                   =>     MergeStrategy.first
  case PathList(ps @ _*) if ps.last endsWith "pom.properties" =>  MergeStrategy.discard
  case x => val oldStrategy = (assemblyMergeStrategy in assembly).value
  oldStrategy(x)
}

“sbt package”成功但是当我想从target / scala-2.11 / classes目录提交时: “spark-submit --class org.apache.spark.examples.streaming.DirectKafkaWordCount --master local [2] /home/hadoop/DirectKafkaProject/target/scala-2.11/kafka-direct_2.11-1.0.jar localhost:9092 XYZ123"

它给了我这个错误:

  

引起:java.lang.ClassNotFoundException:org.apache.spark.streaming.kafka.KafkaUtils $           在java.net.URLClassLoader $ 1.run(URLClassLoader.java:366)

我已经设置了SPARK_CLASSPATH和SPARK_LOCAL_IP。我已经尝试使用-jars选项,但它要求另一个.jar文件并且它一直在询问其他.jar文件。我已经完成了每个网站建议的所有事情,但我无法解决我的问题。 Scala版本:2.11.6 spark版本:2.1.0 kafka版本:2.11-0.10.2.0。

请帮帮我。感谢。

2 个答案:

答案 0 :(得分:0)

tl; dr sbt assemblyspark-submit

sbt assembly汇总了一个jar文件中的所有依赖项,并且您使用了Kafka的外部库,这就是我推荐的内容。

您已经在build.sbt中获得了sbt-assembly插件的定义,这表明它已经成为可能。

执行已组装的Spark应用程序正在使用spark-submit命令行应用程序,如下所示:

bin/spark-submit \
  --class org.apache.spark.examples.streaming.DirectKafkaWordCount \
  --master local[2] \
  target/scala-2.11/StreamKafkaPr‌​og-assembly-1.0.jar localhost:9092 rat123

答案 1 :(得分:0)

以防万一有人偶然发现了这篇文章(就像我一样)。 Jacek的答案非常正确。对我来说,它仍然没有用,因为合并策略至关重要(并且我使用了一些来自互联网的示例)。 适用于我的最简单的表单(假设您只有sparkspark-sql-kafka等)

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