2013-05-03 22 views
2

我有风暴的拓扑结构,这我在群集中运行下面的代码:在集群上执行风暴,清理不会被调用

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()).fieldsGrouping(
     "word-normalizer", new Fields("word")); 
Config conf = new Config(); 
conf.put("wordsFile", args[0]); 
conf.setDebug(false); 
conf.put(Config.TOPOLOGY_MAX_SPOUT_PENDING, 1); 
try { 
    StormSubmitter.submitTopology("Test-topology", conf, 
      builder.createTopology()); 
} catch (AlreadyAliveException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (InvalidTopologyException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

当我调试它,下面的cleanup()方法不运行类WordCounter ...

@Override 
public void cleanup() { 
    System.out.println("-- Word Counter --"); 
} 

...并且拓扑未完成运行。

+0

你能分享异常消息吗? – abhi 2013-05-04 09:59:19

+0

所以,我给你带来了疑问的好处,并删除了我在格式化代码时找到的'insert here here'部分。除此之外,这个问题真的不完整 - 你应该提供错误条件,堆栈跟踪,以及你的真正意思是“拓扑未完成” - 我冒昧并假定“没有完成运行”,但我很乐意待确认。 – Makoto 2013-09-02 06:41:48

+1

我想你有答案吗? – 2013-09-02 07:12:17

回答

3

清理()

就是所谓的本地模式,当你shutdown()localcluster。但不是你的生产集群上时storm kill执行,或是从灵气服务器中删除(清除从未被称为生产群集上,它仅在本地模式)

 // Keep commented if submitting to production cluster, since no 
     // automatic shutdown is required on production cluster 
     try { 
      // Runs for specified number of ms after submitting topology on 
      // local cluster and then resumes itself and shutdowns the 
      // local cluster 
      Thread.sleep(10000); 
      objOfLocalCluster.shutdown(); 
     } catch (InterruptedException e) { 
      // Prints a stack trace for this Throwable object on the error 
      // output stream.. 
      e.printStackTrace(); 
     } 

有关详细信息:进入这个docs


同样的事情发生在 close()也是(这是用于喷口)关于该检查的更多细节 here

+0

什么是清理资源的“理想风暴”方式? JVM挂钩? – 2016-01-22 09:55:02