Storm的基本知識
上篇文章本人簡單的介紹了Storm的起源,今天本人又繼續學習了Storm的基本的一些知識,基本瞭解了他的基本用法,還好,不算太難,如果大家瞭解了Hadoop的MapReduce模型的話,看這個也是非常類似的。在瞭解Storm的原型時,首先了解一些概念。
1.Tuple(元組),作為訊息傳遞的基本單元,元組中的欄位可以是任何型別的物件。元組會用於後面提到的Bolt方法的execute方法。
2.Spout(噴口),是拓撲的流的來源,就是產生源資料流的元件。噴口的資料來源可以有幾種方式。(1).直接連線資料來源 (2).從訊息佇列中讀取訊息 (3).通過DRPC的形式,簡單的說,Spout相當於Hadoop中的Map。
3.Bolt(螺栓),在拓撲中處理所有的邏輯。在Bolt中可以完成連線運算,統計分析,等等各種邏輯操作。執行的方法就是剛剛說的那個execute()方法。
4.Topology(拓撲),是Storm中執行的一個實時應用程式,一個完整的Spout--Bolt就是在一個Topology中執行的。Storm中的拓撲相當於Hadoop中的作業job,在MapReduce的作業會最終完成,而一個拓撲會永遠執行直到他被殺死。在java裡,用的是TopologyBuilder來構建拓撲。
5.Nimbus程序與Supervisor程序。主控結點執行Nimbus的守護程序。負責分配節點任務,並監視主機故障,類似Hadoop的jobTracker。每個工作節點執行的是Supervisor守護程序,監聽主機上的已經分配好的作業。
6.Worker(工作程序),Task(任務),Executor(執行器),三者的關係非常相近,用一張圖表示直接明瞭。這3個關係的在一定程度上也控制著Storm拓撲的並行度。在一個節點中可以有1個或多個工作程序執行在1個或多個拓撲中。
,所以這也表明了在Storm可以並行執行任務。下面給出一個非常簡單的拓撲的例子:
public class SimpleTopology { public static void main(String[] args) { try { // 例項化TopologyBuilder類。 TopologyBuilder topologyBuilder = new TopologyBuilder(); // 設定噴發節點並分配併發數,該併發數將會控制該物件在叢集中的執行緒數。 topologyBuilder.setSpout("SimpleSpout", new SimpleSpout(), 1); // 設定資料處理節點並分配併發數。指定該節點接收噴發節點的策略為隨機方式。 topologyBuilder.setBolt("SimpleBolt", new SimpleBolt(), 3).shuffleGrouping("SimpleSpout"); Config config = new Config(); config.setDebug(true); if (args != null && args.length > 0) { config.setNumWorkers(1); StormSubmitter.submitTopology(args[0], config, topologyBuilder.createTopology()); } else { // 這裡是本地模式下執行的啟動程式碼。 config.setMaxTaskParallelism(1); LocalCluster cluster = new LocalCluster(); cluster.submitTopology("simple", config, topologyBuilder.createTopology()); } } catch (Exception e) { e.printStackTrace(); } } }
上面的例子給出了本地測試模式和正式開發模式的的拓撲提交例子。為了比較Hadoop和Storm的區別。我做了表格:
對比項 Hadoop Storm
系統角色 JobTracker Nimbus
TaskTracker Supervisor
應用名稱 Job Topology
元件介面 Map/Reduce Spout/Bolt
以上就是個人在最近一段時間學習Storm的一點小小總結