为什么我的Spark应用程序无法使用“NoSuchMethodException:org.apache.spark.util.SystemClock”运行?

时间:2017-06-28 18:34:27

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

我正在尝试使用Java API而不是scala从apache Spark流连接到Kafka。

我收到以下错误:

  

引起:java.lang.NoSuchMethodException:   org.apache.spark.util.SystemClock。() at   java.lang.Class.getConstructor0(Class.java:3082)at   java.lang.Class.newInstance(Class.java:412)

创建JavaStreamingContext对象时会弹出错误。

这是我的代码:

JavaStreamingContext jssc = new JavaStreamingContext("local[2]", "KafkaWordCount",
            new Duration(2000), System.getenv("SPARK_HOME"),
            JavaStreamingContext.jarOfClass(JavaKafkaWordCount.class));

    Map<String, Integer> topicMap = new HashMap<String, Integer>();

    topicMap.put("fast-messages", 2);

    JavaPairDStream<String, String> messages = KafkaUtils.createStream(jssc, "localhost:9092", "test", topicMap);

    JavaDStream<String> lines = messages.map(new Function<Tuple2<String, String>, String>() {
     // @Override
      public String call(Tuple2<String, String> tuple2) {
        return tuple2._2();
      }
    });

Jar版本:

  

spark-streaming-kafka_2.10 - 1.6.2   spark-core_2.11 - 1.2.1   spark-streaming_2.10 - 1.6.0

如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

TL; DR 使用spark-core_2.10

这是因为他们使用的Scala版本的依赖性不匹配。

请参阅spark-streaming-kafka_2.10spark-core_2.11以及spark-streaming_2.10。流式广告罐为Scala 2.10编译,而spark-core为2.11。

它不会强迫您使用Scala而不是Java。 Spark主要使用Scala编写,使用Scala构建的依赖项必须与Scala版本匹配。