2013-05-03 61 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