Java 使用kafka运行Spark流媒体示例时出现NoSuchMethodError

Java 使用kafka运行Spark流媒体示例时出现NoSuchMethodError,java,scala,apache-spark,apache-kafka,Java,Scala,Apache Spark,Apache Kafka,我正在使用spark-2.4.4-bin-without-hadoop,我想测试自包含的示例JavaDirectKafkaWordCountexample 从官方文件中,它提到应用程序应包括spark-streaming-kafka-0-10_2.12此依赖项。因此,我将spark-streaming-kafka-0-10_2.12-2.4.0.jar下载到jars目录 但是,当我运行run example streaming.JavaDirectKafkaWordCount device1:9

我正在使用
spark-2.4.4-bin-without-hadoop
,我想测试自包含的示例
JavaDirectKafkaWordCountexample

从官方文件中,它提到应用程序应包括
spark-streaming-kafka-0-10_2.12
此依赖项。因此,我将
spark-streaming-kafka-0-10_2.12-2.4.0.jar
下载到jars目录

但是,当我运行
run example streaming.JavaDirectKafkaWordCount device1:9092 group\u id主题时,它会显示
NoSuchMethodError

20/01/13 11:51:12 INFO handler.ContextHandler: Started o.s.j.s.ServletContextHandler@1549bba7{/metrics/json,null,AVAILABLE,@Spark}
Exception in thread "main" java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)V
        at org.apache.spark.streaming.kafka010.PreferConsistent$.<init>(LocationStrategy.scala:42)
        at org.apache.spark.streaming.kafka010.PreferConsistent$.<clinit>(LocationStrategy.scala)
        at org.apache.spark.streaming.kafka010.LocationStrategies$.PreferConsistent(LocationStrategy.scala:66)
        at org.apache.spark.streaming.kafka010.LocationStrategies.PreferConsistent(LocationStrategy.scala)
        at org.apache.spark.examples.streaming.JavaDirectKafkaWordCount.main(JavaDirectKafkaWordCount.java:84)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
        at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:845)
        at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:161)
        at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:184)
        at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
        at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:920)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:929)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
20/01/13 11:51:12 INFO spark.SparkContext: Invoking stop() from shutdown hook
20/01/13 11:51:12信息处理程序。上下文处理程序:启动o.s.j.s。ServletContextHandler@1549bba7{/metrics/json,null,可用,@Spark}
线程“main”java.lang.NoSuchMethodError中出现异常:scala.Product.$init$(Lscala/Product;)V
在org.apache.spark.streaming.kafka010.PreferConsistent$(LocationStrategy.scala:42)
位于org.apache.spark.streaming.kafka010.PreferConsistent$(LocationStrategy.scala)
在org.apache.spark.streaming.kafka010.LocationStrategies$.PreferConsistent(LocationStrategy.scala:66)
位于org.apache.spark.streaming.kafka010.LocationStrategies.PreferConsistent(LocationStrategy.scala)
位于org.apache.spark.examples.streaming.JavaDirectKafkaWordCount.main(JavaDirectKafkaWordCount.java:84)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
位于org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:845)
位于org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:161)
位于org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:184)
位于org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
位于org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:920)
位于org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:929)
位于org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
2013年1月20日11:51:12信息spark.SparkContext:从关机挂钩调用stop()
根据文档- 您必须将流应用程序编译成JAR。如果使用spark submit启动应用程序,则不需要在JAR中提供spark和spark流。但是,如果您的应用程序使用高级源(例如Kafka、Flume),那么您必须将它们链接到的额外工件及其依赖项打包到用于部署应用程序的JAR中。例如,使用KafkaUtils的应用程序必须在应用程序JAR中包含spark-streaming-kafka-0-10_2.12及其所有可传递依赖项


或者,您可以使用类似“-packages org.apache.spark:spark-sql-kafka-0-10_2.12:2.4.0”的spark提交命令。

您的错误似乎表明您正在将spark与Scala 2.11而不是2.12一起使用。请把你的包装修好是的,谢谢你的提醒。我只是想用一种简单的方法来解决这个问题:下载这个
spark-streaming-kafka-0-10_2.11
。你应该使用
--packages
而不是下载单个JAR。请看,非常感谢:)在这种情况下,“流媒体应用程序”已经是一个JAR了。它在examples文件夹中。不过,该错误与缺少卡夫卡库无关