2016-04-14 134 views
1

使用案例的NoSuchMethodError:星火+卡夫卡:Java的

簡單的信息在處理使用的Spark與Java作爲編程語言

背景

  • 體驗從卡夫卡的話題讀取和打印卡夫卡風暴一體化,開發和維護卡夫卡羣集和風暴拓撲超過一年。
  • 沒有Apache Spark和Scala的經驗
  • 簡單的字數統計應用程序使用獨立的Spark集羣構建和測試成功。

問題

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 
+0

這種情況只發生在其中含有「 - >」的火花流式作業,顯然spark-streaming-kafka也有。說明它在這裏:http://stackoverflow.com/questions/39395521/spark-2-0-0-streaming-job-packed-with-sbt-assembly-lacks-scala-runtime-methods – Utgarda

回答

2

NoSuchMethodError幾乎總是指示兩個庫是不是兼容的版本。在這種情況下,Spark-Streaming Kafka試圖使用不存在的Scala語言功能。檢查Spark-Streaming Kafka的版本是否與您使用的Scala版本兼容。確保你沒有真正使用Scala而不是Java。

+0

我需要scala安裝在機器上?我在這裏沒有對Scala做任何事情。使用相同的設置簡單的字數運行良好。 – Confused

+0

是的,你這樣做:scala.Predef $ .ArrowAssoc是一個斯卡拉的東西 – Samuel

+0

那麼,我明白了,但爲什麼簡單的應用程序然後運行沒有它?那個「火花」的部分不需要安裝scala嗎?所使用的包應該拉入所需的依賴關係,並且我用依賴關係打包jar。我將pm.xml更改爲使用2.10版本。錯誤消失了,程序正在運行(?)但沒有得到期望的輸出,這是由於'初始作業未接受任何資源;檢查你的集羣用戶界面以確保工作人員已註冊並擁有足夠的資源 – Confused

相關問題