57.storm拓撲結構調整

幾個概念

Topology(拓撲):Spout、Bolt組成的一個完整的流程結構;java

Stream Grouping:流分組、數據的分發方式;ui

Spout:直譯 水龍頭,也就是 消息源 的意思;spa

Bolt:螺栓、處理器。很形象,水從上面的那個「水龍頭」流出來,通過第一個螺栓,通過第二個螺栓,通過第三第四個螺栓...線程

Worker:工做進程3d

Executor:執行器、task的線程;code

Task:具體執行的任務;orm

Configuration:配置。blog

實際操做

回顧

在上上節(55節),本地模式跑起來的,只有一個JVM(雖然分配了兩個,cfg.setNumWorkers(2); 可是在本地跑的時候只可能啓動一個JVM),那麼拓撲的執行狀況應該是下面這樣的,一個worker下有幾個Executor,每一個Executor分別對應一個Spout或者Bolt(圖片中的bolt和Spout名稱和代碼不一致,請對號入座):進程

 

結構調整

若是咱們把帶碼稍做改動(只須要改Topology)圖片

 1 import backtype.storm.Config;
 2 import backtype.storm.LocalCluster;
 3 import backtype.storm.StormSubmitter;
 4 import backtype.storm.topology.TopologyBuilder;
 5 import bhz.bolt.PrintBolt;
 6 import bhz.bolt.WriteBolt;
 7 import bhz.spout.PWSpout;
 8 
 9 public class PWTopology2 {
10 
11     public static void main(String[] args) throws Exception {
12         
13         Config cfg = new Config();
14         cfg.setNumWorkers(2);//設置使用倆個工做進程
15         cfg.setDebug(false);
16         TopologyBuilder builder = new TopologyBuilder();
17         //設置sqout的並行度和任務數(產生2個執行器和倆個任務)
18         builder.setSpout("spout", new PWSpout(), 2);//.setNumTasks(2);
19         //設置bolt的並行度和任務數:(產生2個執行器和4個任務)
20         builder.setBolt("print-bolt", new PrintBolt(), 2).shuffleGrouping("spout").setNumTasks(4);
21         //設置bolt的並行度和任務數:(產生6個執行器和6個任務)
22         builder.setBolt("write-bolt", new WriteBolt(), 6).shuffleGrouping("print-bolt");
23         
24         
25         //1 本地模式
26 //        LocalCluster cluster = new LocalCluster();
27 //        cluster.submitTopology("top2", cfg, builder.createTopology());
28 //        Thread.sleep(10000);
29 //        cluster.killTopology("top2");
30 //        cluster.shutdown();
31         
32         //2 集羣模式
33         StormSubmitter.submitTopology("top2", cfg, builder.createTopology());
34         
35     }
36 }

1.談談本地爲何會生成那麼多文件

若是咱們以本地模式啓動,那麼運行結果將會是這樣的,temp文件夾裏有6個文件

那麼爲何會產生6個文件呢?注意代碼的第22行

這裏設置6個執行器來執行WriteBolt,默認每一個執行器是一個task,也就是有6個task;再來看看WriteBolt是怎麼造成文件的:

能夠看出,每一個線程都會在099_test下造成一個文件。

2.spout部分的拓撲結構調整

假如,咱們只修改這一行代碼

那麼在只有一個JVM的狀況下,總體拓撲結構應該相似這樣的:

3.若是徹底修改爲上面的代碼,而且能夠啓動多個JVM的話,呢麼拓撲結構應該是下面這樣的(圖片中的bolt和Spout名稱和代碼不一致,請對號入座):

 

 

 針對上面的這種拓撲結構的總結:

 

遇到一點問題,storm supervisor & 啓動報錯java.lang.RuntimeException: java.io.EOFException:

解決辦法:刪除storm.yaml中配置的storm.local.dir指向的目錄中的supervisor和workers兩個目錄,再次啓動便可。

相關文章
相關標籤/搜索