NoSuchMethodError:Spark + Kafka:Java

时间:2016-04-14 23:09:28

标签: java apache-spark streaming apache-kafka

使用案例

使用Spark with Java作为编程语言从Kafka主题获取和打印简单消息

背景

  • 处理Kafka Storm Integration的经验,开发和维护kafka集群和风暴拓扑一年多。
  • 没有Apache Spark和Scala的经验
  • 使用独立火​​花簇成功构建并测试了简单的字数统计应用程序。

问题

Exception in thread "main" java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)Ljava/lang/Object;
    at org.apache.spark.streaming.kafka.KafkaUtils$.createStream(KafkaUtils.scala:64)
    at org.apache.spark.streaming.kafka.KafkaUtils$.createStream(KafkaUtils.scala:110)
    at org.apache.spark.streaming.kafka.KafkaUtils.createStream(KafkaUtils.scala)
    at com.random.spark.EventsToFileAggregator.main(EventsToFileAggregator.java:54)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

在EventsToFileAggregator.java:54

JavaPairReceiverInputDStream<String, String> messages =
 KafkaUtils.createStream(jsc, args[0], args[1], topicMap,
 StorageLevel.MEMORY_AND_DISK_SER());

的pom.xml

<dependencies>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>1.6.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-streaming_2.11</artifactId>
        <version>1.6.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-streaming-kafka_2.11</artifactId>
        <version>1.6.1</version>
    </dependency>
</dependencies>

构建

成功,没有任何警告

命令

./bin/spark-submit --class com.random.spark.EventsToFileAggregator --master spark://host:7077 /usr/local/spark/stats/target/stats-1.0-SNAPSHOT-jar-with-dependencies.jar localhost:2181 test topic 2

1 个答案:

答案 0 :(得分:2)

NoSuchMethodError几乎总是表明两个库不兼容。在这种情况下,Spark-Streaming Kafka正在尝试使用不存在的Scala语言功能。检查Spark-Streaming Kafka的版本是否与您正在使用的Scala版本兼容。确保您实际上没有使用Scala而不是Java。