spark流:java.lang.noclassdeffounderror:kafka/api/topicmetadatarequest

trnvg8h3  于 2021-06-08  发布在  Kafka
关注(0)|答案(3)|浏览(437)

我编写了一个spark流应用程序,它从kafka读取数据。我已经用它做了jar spark1.6.0 以及 kafka0.8.2.2 . 我正在使用kafka direct stream API: KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topicSet) 当我在yarn client模式下运行应用程序时,它会成功运行,但当我在yarn cluster模式下运行时,它会失败,出现以下异常:

User class threw exception: java.lang.NoClassDefFoundError: kafka/api/TopicMetadataRequest.

我在应用程序jar中打包了kafka类,甚至在运行时,kafka/api/topicmetadatarequest也会从应用程序jar中加载。
据我所知, NoClassDefFoundError 当编译和运行时之间存在版本不匹配时将发生。

xxslljrj

xxslljrj1#

KafkaUtils 在spark中不可用,您必须添加 spark-streaming-kafka 模块单独添加到spark应用程序。
你应该使用 --packages 命令行选项。

./bin/spark-shell --packages org.apache.spark:spark-streaming-kafka-0-10_2.10:1.6.0

为scala和spark使用合适的版本。

jm2pwxwz

jm2pwxwz2#

--
我的.sbt有以下块:

libraryDependencies ++= Seq( 
"org.apache.spark" %% "spark-core" % "1.6.0" % "provided",   
"org.apache.spark" %% "spark-sql" % "1.6.0" % "provided",   
"org.apache.spark" %% "spark-streaming" % "1.6.0" % "provided",   
"org.apache.spark" %% "spark-mllib" % "1.6.0" % "provided",   
"org.apache.spark" % "spark-streaming-kafka_2.10" % "1.6.0",    
"org.apache.kafka" % "kafka_2.10" % "0.8.2.2",   
"org.springframework.security" % "spring-security-web" % "3.0.7.RELEASE",   
"org.scalatest" % "scalatest_2.10" % "3.0.0-M12" % "test",   
"junit" % "junit" % "4.11",  
"com.typesafe.play" % "play_2.10" % "2.4.0-M2",   
"org.apache.httpcomponents" % "httpclient" % "4.2.5" )  

    mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>   {
        case PathList("META-INF", xs @ _*) => MergeStrategy.discard
        case x => MergeStrategy.first    } }

有什么建议如何解决这个问题,或者为什么会发生这个异常?

相关问题