在進群生産環境下運作Topology和在本地模式下運作非常相似。下面是步驟:
1、定義Topology(如果使用Java開發語言,則使用TopologyBuilder來建立)
2、使用StormSubmitter向叢集送出Topology。StormSubmitter有三個參數,Topology的名字,Topology的配置,和Topology本身。下面是例子:
Config conf = new Config();
conf.setNumWorkers(20);
conf.setMaxSpoutPending(5000);
StormSubmitter.submitTopology("mytopology", conf, topology);
3、将你的代碼和你代碼所依賴的jar包打包成一個jar包(Storm的jar包除外,Storm的jar包會被添加到worker節點的classpath路徑)
如果你使用maven,插件Maven Assembly Plugin會幫你打包,隻需将下面的代碼添加到你的pom.xml中:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.path.to.main.Class</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
然後運作mvn assembly:assembly指令來擷取有效的jar包。确認你的jar包中沒包含Storm的jar包,因為的classpath中已經存在。
4、使用Storm用戶端将Topology送出到叢集,指定你jar包的路徑、名稱河所有的參數然後運作:
storm jar path/to/allmycode.jar org.me.MyTopology arg1 arg2 arg3
storm jar指令會送出jar包給叢集并且使用StormSubmitter類和有效地叢集對話。在上面的示例中,在送出jar包後storm jar會使用"arg1","arg2","arg3"三個參數調用org.me.MyTopology的主方法.
你可以閱讀設定Storm開發環境一文來檢視如何使用storm用戶端來和Storm進群對話。
常用的設定
每個Topology都有很多不同的配置。點選此處檢視Topology的所有設定。帶“TOPOLOGY”字首的設定(其他的是叢集的設定,不能被覆寫)可以被特定的Topology配置覆寫。下面是一些常用的Topology設定:
1、Config.TOPOLOGY_WORKERS
這個參數設定設定了使用了多少個工作程序去執行Topology。例如,如果你将此參數設定為25,就會有25個Java程序在叢集中執行所有任務。如果在Topology中有150個并行執行的元件,那麼每個工作程序會以6個線程的方式執行個任務。
2、Config.TOPOLOGY_ACKER_EXECUTORS
這個參數設定當Spout元組被完全處理後,追蹤和探測元組樹的執行程序的數量。Acker是Storm的一部分,你可以閱讀Guaranteeing message processing一文來擷取更多關于Acker的資訊。如果不設定此參數,或者将此參數設定為空,Storm會将此參數設定為Topology指定的運作工作節點的數量。如果将這個參數設定為0,Storm會在Spout發出元組後立刻傳回成功資訊,這将影響可靠性。
// storm配置
Config stormConf = new Config();
stormConf.TOPOLOGY_ACKER_EXECUTORS = 0;//關閉
3、Config.TOPOLOGY_MAX_SPOUT_PENDING
此參數設定了在單一一個Spout任務中一次可以存留的最大元組的數量(沒有傳回成功或者失敗消息的元組)。強烈建議設定此參數防止隊列溢出。
4、Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS
這個參數設定了Spout元組被成功處理的最大逾時時間。預設是30s,這對大多數的Topology來說已經足夠了。閱讀Guaranteeing message processing一文了解更多Storm可靠性的知識。
5、Config.TOPOLOGY_SERIALIZATIONS
你可以使用這個參數來注冊更多的序列化器,以便在元組中使用自定義類型。
殺死一個Topology
要殺死一個Topology圖譜,隻需簡單的運作:
storm kill {stormname}
将送出Topology時設定的名字傳給 storm kill。
Storm不會立刻殺死Topology。它會使所有的Spout失效并且确認他們不會再發射任何元組。Storm會在摧毀所有的工作節點之前等待Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS參數所設定的秒數,這給Topology足夠的時間來處理完所有的元組。
更新運作中的Topology