1. 程式人生 > >Storm單詞技術案例

Storm單詞技術案例

功能說明:

設計一個topology,來實現對文件裡面的單詞出現的頻率進行統計

整個totopolgy分為三個部分:

1. RandomSentenceSpout:資料來源,在已知的英文句子中,隨機發送一條句子出去。

2. SplitSentenceBolt : 負責將單行文字記錄(句子)切分為單詞.

3. WordcountBolt :負責對單詞的頻率進行累加

7.6、Stream Grouping詳解

Storm裡面有7種類型的stream grouping

  1. Shuffle Grouping: 隨機分組, 隨機派發stream裡面的tuple,保證每個bolt接收到的tuple數目大致相同。

  2. Fields Grouping:按欄位分組,比如按userid來分組,具有同樣userid的tuple會被分到相同的Bolts裡的一個task,而不同的userid則會被分配到不同的bolts裡的task。

  3. All Grouping:廣播發送,對於每一個tuple,所有的bolts都會收到。

  4. Global Grouping:全域性分組, 這個tuple被分配到storm中的一個bolt的其中一個task。再具體一點就是分配給id值最低的那個task。

  5. Non Grouping:不分組,這stream grouping個分組的意思是說stream不關心到底誰會收到它的tuple。目前這種分組和Shuffle grouping是一樣的效果,
     有一點不同的是storm會把這個bolt放到這個bolt的訂閱者同一個執行緒裡面去執行。

  6. Direct Grouping: 直接分組, 這是一種比較特別的分組方法,用這種分組意味著訊息的傳送者指定由訊息接收者的哪個task處理這個訊息。只有被宣告為Direct Stream的訊息流可以宣告這種分組方法。而且這種訊息tuple必須使用emitDirect方法來發射。訊息處理者可以通過TopologyContext來獲取處理它的訊息的task的id (OutputCollector.emit方法也會返回task的id)。

  7. Local or shuffle grouping:如果目標bolt有一個或者多個task在同一個工作程序中,tuple將會被隨機發生給這些tasks。否則,和普通的Shuffle Grouping行為一致。