簡體   English   中英

Spark Streaming - java.lang.NoSuchMethodError錯誤

[英]Spark Streaming - java.lang.NoSuchMethodError Error

我正在嘗試從Spark Streaming訪問流式推文。

這是軟件配置。

Ubuntu 14.04.2 LTS

scala -version

Scala代碼運行器版本2.11.7 - 版權所有2002-2013,LAMP / EPFL

spark-submit --version

Spark版本1.6.0

以下是代碼。

object PrintTweets
{
 def main(args: Array[String]) {

  // Configure Twitter credentials using twitter.txt
  setupTwitter()

  // Set up a Spark streaming context named "PrintTweets" that runs locally using
  // all CPU cores and one-second batches of data
  val ssc = new StreamingContext("local[*]", "PrintTweets", Seconds(1))

  // Get rid of log spam (should be called after the context is set up)
  setupLogging()

  // Create a DStream from Twitter using our streaming context
  val tweets = TwitterUtils.createStream(ssc, None)


  // Now extract the text of each status update into RDD's using map()
  val statuses = tweets.map(status => status.getText())

  // Print out the first ten
  statuses.print()

  // Kick it all off
  ssc.start()
  ssc.awaitTermination()
 }
}

Utilities.scala

object Utilities {
/** Makes sure only ERROR messages get logged to avoid log spam. */
def setupLogging() = {
  import org.apache.log4j.{Level, Logger}   
  val rootLogger = Logger.getRootLogger()
  rootLogger.setLevel(Level.ERROR)   
}

/** Configures Twitter service credentials using twiter.txt in the   main workspace directory */
def setupTwitter() = {
  import scala.io.Source

  for (line <- Source.fromFile("./data/twitter.txt").getLines) {
   val fields = line.split(" ")
   if (fields.length == 2) {
    System.setProperty("twitter4j.oauth." + fields(0), fields(1))
   }
 }

}

}

問題:

由於它需要twitter4j庫,我已經添加了
twitter4j-core-4.0.4,twitter4j-stream-4.0.4在eclipse構建路徑中作為外部jar。

然后我運行程序,它沒有拋出任何錯誤。 但這些推文沒有出現在控制台中。 它是空的。

所以我看到一些論壇並將twitter4j降級為3.0.3。 同樣在Eclipse中,我在Build Path窗口中選擇了Scala 2.10 Library容器。

之后我得到java.lang.NoSuchMethodError運行時錯誤。

16/05/14 11:46:01 ERROR Executor: Exception in task 0.0 in stage 0.0 (TID 0)
java.lang.NoSuchMethodError:    twitter4j.TwitterStream.addListener(Ltwitter4j/StreamListener;)V
at    org.apache.spark.streaming.twitter.TwitterReceiver.onStart(TwitterInputDStream.scala:72)
at   org.apache.spark.streaming.receiver.ReceiverSupervisor.startReceiver(ReceiverSupervisor.scala:148)
at org.apache.spark.streaming.receiver.ReceiverSupervisor.start(ReceiverSupervisor.scala:130)
at org.apache.spark.streaming.scheduler.ReceiverTracker$ReceiverTrackerEndpoint$$anonfun$9.apply(ReceiverTracker.scala:575)
at org.apache.spark.streaming.scheduler.ReceiverTracker$ReceiverTrackerEndpoint$$anonfun$9.apply(ReceiverTracker.scala:565)
at org.apache.spark.SparkContext$$anonfun$37.apply(SparkContext.scala:1992)
at org.apache.spark.SparkContext$$anonfun$37.apply(SparkContext.scala:1992)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
at org.apache.spark.scheduler.Task.run(Task.scala:89)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:213)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

請幫我解決這個問題。 最初我使用Scala 2.11構建了spark。 那是問題所在。 我是否需要卸載所有內容並重新安裝Scala 2.10,然后是Spark預編譯包。

或者除了Scala 2.11之外,我需要在我的系統中安裝Scala 2.10嗎?

上述異常似乎是由spark version 1.6.0twitter4j 3.0.3 version的不兼容引起的。

org.apache.spark.streaming.twitter.TwitterReceiveronStart方法中傳遞的twitter4j.TwitterStream有方法addListener,它接受twitter4j.StreamListener實例。

twitter4j 3.0.3 version沒有方法twitter4j.TwitterStream.addListener(StreamListener) ,而是幾乎沒有其他addListener方法,它們采用StreamListener的子類。

twitter4j 4.0.4 version有所需的方法,這就是為什么這個庫沒有錯誤的原因。 所以更改為twitter4j 3.0.3 version將無法解決問題。

問題出在其他地方。

就我而言。 我有火花java項目。 我清理了pom文件並開始按順序添加。 首先解決火花相關的錯誤,然后火花發射器,在病房的基礎上更大的庫。 注意我使用的是cdh6.2.0環境

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM