天天看點

Strom配置說明

在進群生産環境下運作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

繼續閱讀