Eclipse Spark Streaming-java.lang.NoSuchMethodError错误

Eclipse Spark Streaming-java.lang.NoSuchMethodError错误,eclipse,scala,apache-spark,spark-streaming,twitter4j,Eclipse,Scala,Apache Spark,Spark Streaming,Twitter4j,我正在尝试访问Spark streaming的推特流 这是软件配置 Ubuntu 14.04.2 LTS scala版本 Scala code runner版本2.11.7——版权所有2002-2013,LAMP/EPFL spark提交--版本 Spark版本1.6.0 下面是代码 object PrintTweets { def main(args: Array[String]) { // Configure Twitter credentials using twitter.txt

我正在尝试访问Spark streaming的推特流

这是软件配置

Ubuntu 14.04.2 LTS

scala版本

Scala code runner版本2.11.7——版权所有2002-2013,LAMP/EPFL

spark提交--版本

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()
 }
}
斯卡拉公用事业公司

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))
   }
 }
请帮我解决这个问题。最初,我使用Scala 2.11安装了spark。这就是问题所在。我是否需要卸载所有内容并重新安装Scala 2.10,然后安装Spark预编译包


或者除了Scala 2.11之外,我的系统还需要Scala 2.10吗?

上述异常似乎是由
spark 1.6.0版
twitter4j 3.0.3版
的不兼容引起的

org.apache.spark.streaming.twitter.TwitterReceiver
onStart
方法中传递的
twitter4j.TwitterStream
,具有方法addListener,该方法以
twitter4j.StreamListener
为实例

twitter4j 3.0.3版本
没有方法
twitter4j.TwitterStream.addListener(StreamListener)
,相反,它只有很少的其他
addListener
方法,这些方法采用了
StreamListener
的子类

twitter4j4.0.4版本
具有所需的方法,因此该库不会出现错误。因此,更改为twitter4j 3.0.3版本不会解决问题

问题出在别的地方。

就我而言。 我有一个spark java项目。 我清理了pom文件并开始按顺序添加。首先解决了与spark相关的错误,然后是spark launcher,接下来是基于更大库的ward。
注意:我使用的是cdh6.2.0环境

您已经回答了自己的问题。既然您所得到的一切都在Scala2.11中,为什么还要使用Scala2.10nEclipse呢?你能把它改成Scala 2.11,然后再试一次吗?嘿,谢谢大家。在查看Spark UI后,我可以通过查看流程图来解决这个问题。我正在VM内运行程序,问题是由于
local[*]
设置引起的。在我将其更改为
local[2]
后,我可以看到推文。我认为
local[*]
无法获得足够的线程来处理输入流推文。坦率地说,我看不出这是如何解决问题的。嗯,问题与分配给工作的资源量无关。但无论如何对你有好处:)
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)