2016-05-14 19 views
1

Spark Streamingからストリーミングツイートにアクセスしようとしています。スパークストリーミング - java.lang.NoSuchMethodErrorエラー

これはソフトウェア構成です。

のUbuntu 14.04.2 LTS

スカラ-version

スカラコードランナーバージョン2.11.7 - 著作権2002年から2013年、LAMP/EPFL

火花 - サブミット - バージョン

スパークバージョン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-コア - 4.0 .4、twitter4j-stream-4.0.4をeclipseビルドパスでex ternal jars。

私はプログラムを実行しましたが、エラーをスローしませんでした。しかしツイートはコンソールには表示されません。それは空だった。

私はいくつかのフォーラムを参照し、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を使ってスパークをインストールしました。それは問題ですか?すべてをアンインストールしてからScala 2.10を再インストールして、あらかじめコンパイルしたパッケージを作成してください。

Scala 2.11とは別に、私のシステムにScala 2.10が必要ですか?

+0

あなた自身の質問に答えました。あなたのスカラーがすべてスカラー2.11になっているので、なぜScala 2.10 n Eclipseになるのですか? Scala 2.11に変更して、もう一度やり直せますか? – user1314742

+0

皆さん、ありがとうございます。私はプロセスグラフを見てSparkのUIを調べた後、それを解決することができます。私はVM内でプログラムを実行しています。問題は 'local [*]'設定に起因していました。私はそれを 'local [2]'に変更した後、私はつぶやきを見ることができます。私は 'local [*]'が入力ストリーミングツイートを処理するのに十分なスレッドを獲得できないと思います。 – user3057556

+0

率直に言って、私はこれがどのように問題を解決したのか分かりません。 IMHOでは、問題はジョブに割り当てられたリソースの量とは関係ありません。とにかくあなたのために良い:) – user1314742

答えて

2

上記の例外は、互換性がspark version 1.6.0およびtwitter4j 3.0.3 versionであると思われます。

twitter4j.TwitterStreamorg.apache.spark.streaming.twitter.TwitterReceiveronStartメソッドに渡されるメソッドaddListenerは、twitter4j.StreamListenerのインスタンスを取ります。

twitter4j 3.0.3 versionではなく、それはStreamListenerのサブクラスを取るいくつかの他のaddListener方法を、持っている、何の方法twitter4j.TwitterStream.addListener(StreamListener)を持っていません。

は、目的のメソッドを持っています。そのため、このライブラリにはエラーはありません。したがって、twitter4j 3.0.3 versionに変更しても問題は解決しません。

問題は他の場所です。

関連する問題