运行就绪代码期间的异常

时间:2014-02-18 02:11:00

标签: java eclipse apache-storm

当我使用Eclipse导入编写的代码并将其作为java应用程序运行时,我在运行就绪代码中得到一个异常

这是错误......

Exception in thread "main" java.lang.NoSuchMethodError: backtype.storm.topology.TopologyBuilder.setBolt(Ljava/lang/String;Lbacktype/storm/    topology/IBasicBolt;Ljava/lang/Integer;)Lbacktype/storm/topology/BoltDeclarer; 
at TopologyMain.main(TopologyMain.java:18)

代码是

import spouts.WordReader; 
import backtype.storm.Config; 
import backtype.storm.LocalCluster;
import backtype.storm.topology.TopologyBuilder; 
import backtype.storm.tuple.Fields; 
import bolts.WordCounter; import bolts.WordNormalizer;

public class TopologyMain { public static void main(String[] args) throws InterruptedException { 
  //Topology definition 
  TopologyBuilder builder = new TopologyBuilder(); 
  builder.setSpout("word-reader",new WordReader());
  builder.setBolt("word-normalizer", new WordNormalizer()).shuffleGrouping("word-reader");
  builder.setBolt("word-counter", new WordCounter(),1).fieldsGrouping("word- normalizer", new Fields("word"));

  //Configuration 
  Config conf = new Config();
  conf.put("wordsFile",  args[0]);  onf.setDebug(false);

  //Topology run 
  conf.put(Config.TOPOLOGY_MAX_SPOUT_PENDING, 1);

  LocalCluster cluster = new LocalCluster(); 
  cluster.submitTopology("Getting-Started-Toplogie", conf,  builder.createTopology());

  Thread.sleep(1000); cluster.shutdown(); 
  }
}

3 个答案:

答案 0 :(得分:1)

可能你已经修改了你的TopologyBuilder班级或JAR。因为这种错误意味着类的编译时和运行时版本不同,即.class在编译程序后以某种方式被修改。特别是,程序是使用setBolt()方法编译的,之后,该方法在.class中删除,重命名或修改

答案 1 :(得分:0)

您作为builder.setBolt("word-counter", new WordCounter(),1).fields...()传递的程序和方法参数是正确的。只要JDK版本集为1.5或更高,方法签名builder.setBolt(String id,IBasicBolt bolt,Number parallelism_hint)就应该接受您传递的参数。

从Java版本1.5 Autoboxing feature开始,导入的.class或编译类应解析从原始int到java.lang.Integerjava.lang.Number的引用,因为java.lang.Number是超类。

主要问题可能是项目或工作区设置中设置的JDK 1.4或更低版本。将JDK版本更改为1.5或更高版本可以解决此问题。

答案 2 :(得分:0)

添加以下maven依赖

<dependency>
<groupId>storm</groupId>
<artifactId>storm</artifactId>
<version>0.8.2</version>
</dependency>