2016-04-08 7 views
2
HashSet<String> topicsSet = new HashSet<String>(Arrays.asList(config.getKafkaTopics().split(","))); 
HashMap<String, String> kafkaParams = new HashMap<String, String>(); 
kafkaParams.put("metadata.broker.list", config.getKafkaBrokers()); 

// Create direct KAFKA stream with brokers and topics 
JavaPairInputDStream<String, String> messages = KafkaUtils.createDirectStream(jssc, String.class, String.class, 
     StringDecoder.class, StringDecoder.class, kafkaParams, topicsSet); 

Ich erstelle einen Kafka-Stream mit createDirectStream Funktion von KafkaUtils, wie oben gezeigt. Ich denke, es ist ziemlich Standard, und ich denke, es hat mit Spark-1.5.1 funktioniert.Warum wirft KafkaUtils.createDirectStream einen NoSuchMethodError?

Ich wechselte zu-1.6.1 Zündkerzen, und obwohl ich nicht sicher bin, ob dies wegen der Version ist, wirft es die folgenden Fehler:

Exception in thread "main" java.lang.reflect.InvocationTargetException 
    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:497) 
    at org.apache.spark.deploy.worker.DriverWrapper$.main(DriverWrapper.scala:58) 
    at org.apache.spark.deploy.worker.DriverWrapper.main(DriverWrapper.scala) 
Caused by: java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)Ljava/lang/Object; 
    at kafka.api.RequestKeys$.<init>(RequestKeys.scala:39) 
    at kafka.api.RequestKeys$.<clinit>(RequestKeys.scala) 
    at kafka.api.TopicMetadataRequest.<init>(TopicMetadataRequest.scala:53) 
    at org.apache.spark.streaming.kafka.KafkaCluster.getPartitionMetadata(KafkaCluster.scala:122) 
    at org.apache.spark.streaming.kafka.KafkaCluster.getPartitions(KafkaCluster.scala:112) 
    at org.apache.spark.streaming.kafka.KafkaUtils$.getFromOffsets(KafkaUtils.scala:211) 
    at org.apache.spark.streaming.kafka.KafkaUtils$.createDirectStream(KafkaUtils.scala:484) 
    at org.apache.spark.streaming.kafka.KafkaUtils$.createDirectStream(KafkaUtils.scala:607) 
    at org.apache.spark.streaming.kafka.KafkaUtils.createDirectStream(KafkaUtils.scala) 
    at com.analytics.kafka.consumer.SystemUserAnalyticsConsumer.main(SystemUserAnalyticsConsumer.java:59) 
    ... 6 more 

Dies zu wissen, was genau das Problem sehr wenig Informationen gibt ist.

Was ist das Problem hier?

Antwort

1

Sie verwenden inkompatible Versionen von spark-streaming-kafka-0-10 für Scala-Versionen bei der Kompilierung verwendet/bauen und Laufzeit, dh

libraryDependencies += "org.apache.spark" %% "spark-streaming-kafka-0-10" % "2.0.1" 

Stellen Sie sicher, Scala-Versionen gleich sind (und beachten Sie die zwei Prozentzeichen, die sich darum kümmern und verlassen sich auf scalaVersion).

Verwandte Themen