簡體   English   中英

風暴示例WordCount錯誤InvalidTopologyException

[英]Storm Example WordCount Error InvalidTopologyException

我有點編程和風暴。 我有本書中的一個示例:“ Apache Strom入門”。 我正在使用Storm 1.1.0和jdk 1.8。 當我嘗試以日食霓虹燈或通過命令“ 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

有誰知道這個錯誤是什么原因,我該如何解決?

我寫了這樣的代碼:

噴口:

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;
}

}

我有兩個螺栓:第一個是:

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;
}}

最后一個是:

公共類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;
}}

我的主要課程是:

公共類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();
}}

Ť

構造拓撲時, wordnormalizer有一個錯字。 應該是連接到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.

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