[英]Storm Example WordCount Error InvalidTopologyException
I'm kind of a noob in programming and storm. 我有点编程和风暴。 I have an example from book: "Getting Started with Apache Strom".
我有本书中的一个示例:“ Apache Strom入门”。 I'm using Storm 1.1.0 and jdk 1.8.
我正在使用Storm 1.1.0和jdk 1.8。 when I try to run my codes either in eclipse neon or by command "storm jar ...", I get this Error:
当我尝试以日食霓虹灯或通过命令“ storm jar ...”运行代码时,出现以下错误:
[main] ERROR o.a.s.s.o.a.z.s.NIOServerCnxnFactory - Thread Thread[main,5,main] died org.apache.storm.generated.InvalidTopologyException:null
does anybody knows what is this error for and how can I fix it? 有谁知道这个错误是什么原因,我该如何解决?
I've written my codes like this: 我写了这样的代码:
spout: 喷口:
public class WordReader implements IRichSpout{
TopologyContext context;
SpoutOutputCollector collector;
FileReader filereader;
private boolean completed = false;
public void ack(Object msgId){
System.out.println("OK: "+msgId);
}
public void fail(Object msgId){
System.out.println("FAIL: "+msgId);
}
public void nextTuple(){
if (completed){
try {
Thread.sleep(1000);
} catch (Exception e) {
//do nothing
}
//it should return to function
return;
}
String str;
try {
while ((str = reader.readLine()) != null){
this.collector.emit(new Values(str),str);
}
}catch (Exception e) {
throw new RuntimeException("Error reading tuple",e);
} finally {
completed = true;
}
}
public void open(Map conf, TopologyContext context,
SpoutOutputCollector collector){
try {
this.context = context;
this.filereader = new FileReader(conf.get("words").toString());
}catch(FileNotFoundException e) {
throw new RuntimeException("Error!");
}
this.collector = collector;
}
public void declareOutputFileds(OutputFieldsDeclarer declarer)
{
declarer.declare(new Fields("line"));
}
public void close() {
// TODO Auto-generated method stub
}
public void activate() {
// TODO Auto-generated method stub
}
public void deactivate() {
// TODO Auto-generated method stub
}
public void declareOutputFields(OutputFieldsDeclarer declarer) {
// TODO Auto-generated method stub
}
public Map<String, Object> getComponentConfiguration() {
// TODO Auto-generated method stub
return null;
}
} }
i have two bolts: The First one is: 我有两个螺栓:第一个是:
public class WordNormalizer implements IRichBolt{
private OutputCollector collector;
public void execute (Tuple input){
String sentence = input.getString(0);
String words[] = sentence.split(" ");
//this is foreach structure to navigate in array
for (String word: words){
word= word.trim();
word = word.toLowerCase();
this.collector.emit(new Values(word));
}
collector.ack(input);
}
public void declareOutputFields(OutputFieldsDeclarer declarer){
declarer.declare(new Fields("word"));
}
public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
this.collector = collector;
}
public void cleanup() {
// TODO Auto-generated method stub
}
public Map<String, Object> getComponentConfiguration() {
// TODO Auto-generated method stub
return null;
}}
and the last one is: 最后一个是:
public class WordCounter implements IRichBolt{ 公共类WordCounter实现IRichBolt {
String name;
Integer id;
Map<String, Integer> counters;
private OutputCollector collector;
public void execute(Tuple input) {
String str = input.getString(0);
if(!counters.containsKey(str)){
counters.put(str, 1);
}else{
Integer c = counters.get(str) + 1;
counters.put(str, c);
}
collector.ack(input);
}
public void prepare(Map conf, TopologyContext context, OutputCollector collector)
{
this.counters = new HashMap<String, Integer>();
this.collector = collector;
this.name = context.getThisComponentId();
this.id = context.getThisTaskId();
}
public void cleanup() {
System.out.println("-- Word Counter ["+name+"-"+id+"] --");
for(Map.Entry<String, Integer> entry : counters.entrySet()){
System.out.println(entry.getKey()+": "+entry.getValue());
}
}
public void declareOutputFields(OutputFieldsDeclarer declarer) {
// TODO Auto-generated method stub
}
public Map<String, Object> getComponentConfiguration() {
// TODO Auto-generated method stub
return null;
}}
and my main class is: 我的主要课程是:
public class TopologyMain { 公共类TopologyMain {
public static void main(String[] args) {
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()).shuffleGrouping("word-normalizer");
Config conf = new Config();
conf.put(Config.TOPOLOGY_MAX_SPOUT_PENDING, 1);
conf.put("word", 0);
conf.setDebug(true);
LocalCluster cluster = new LocalCluster();
cluster.submitTopology("word", conf, builder.createTopology());
try{
Thread.sleep(2000);
} catch (Exception e) {
// TODO: handle exception
}
cluster.shutdown();
}}
t Ť
You have a typo in wordnormalizer
when you are constructing your topology. 构造拓扑时,
wordnormalizer
有一个错字。 It should be word-normalizer
connected to word-counter
: 应该是连接到
word-counter
word-normalizer
器:
builder.setBolt("word-normalizer", new WordNormalizer()).shuffleGrouping("word-reader");
builder.setBolt("word-counter", new WordCounter()).shuffleGrouping("word-normalizer");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.