【发布时间】:2017-01-12 08:27:07
【问题描述】:
我正在尝试通过 Spark 流打印从 Kafka 消耗的消息。但是,我一直遇到以下错误:
16/09/04 16:03:33 错误 ApplicationMaster: 用户类抛出异常: java.lang.NoClassDefFoundError: org/apache/spark/streaming/kafka/KafkaUtils$
在 StackOverflow 上有人就这个问题提出了一些问题。例如:https://stackoverflow.com/questions/27710887/kafkautils-class-not-found-in-spark-streaming#=
给出的答案并没有为我解决这个问题。我曾尝试使用 sbt 程序集创建一个“超级 jar”,但这也不起作用。
sbt 文件内容:
name := "StreamKafka"
version := "1.0"
scalaVersion := "2.10.5"
libraryDependencies ++= Seq(
"org.apache.kafka" % "kafka_2.10" % "0.8.2.1" % "provided",
"org.apache.spark" % "spark-streaming_2.10" % "1.6.1" % "provided",
"org.apache.spark" % "spark-streaming-kafka_2.10" % "1.6.1" % "provided",
"org.apache.spark" % "spark-core_2.10" % "1.6.1" % "provided" exclude("com.esotericsoftware.minlog", "minlog") exclude("com.esotericsoftware.kryo", "kryo")
)
resolvers ++= Seq(
"Maven Central" at "https://repo1.maven.org/maven2/"
)
assemblyMergeStrategy 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)
}
【问题讨论】:
-
提交作业的Spark节点是否必须安装Kafka?
-
从 spark-streaming-kafka 中移除提供的
-
@vishnuviswanath 我删除了提供。仍然抛出相同的错误。
-
对不起。您还必须从 kafka_2.10 中删除提供的
-
@vishnuviswanath 我试过了,但我仍然得到同样的错误:错误 ApplicationMaster:用户类抛出异常:java.lang.NoClassDefFoundError:org/apache/spark/streaming/kafka/KafkaUtils$。
标签: apache-spark sbt apache-kafka spark-streaming