Storm編程模型總結

  • 目錄
    • 前言:
    • 1、Storm編程模型
    • 2、對應的的WordCount案例
    • 總結:

目錄

前言:

對于Storm的編程模型有必要做一個詳細的介紹(配合WC案例來介紹)

1、Storm編程模型

這里寫圖片描述
上圖中組件的解釋:

  • DataSource:外部數據源

  • Spout:接受外部數據源的組件,將外部數據源轉化成Storm內部的數據,以Tuple為基本的傳輸單元下發給Bolt

  • Bolt:接受Spout發送的數據,或上游的bolt的發送的數據。根據業務邏輯進行處理。發送給下一個Bolt或者是存儲到某種介質上。介質可以是Redis可以是mysql,或者其他。

  • Tuple:Storm內部中數據傳輸的基本單元,里面封裝了一個List對象,用來保存數據。

  • StreamGrouping:數據分組策略

    7種:shuffleGrouping(Random函數),Non Grouping(Random函數),FieldGrouping(Hash取模)、Local or ShuffleGrouping 本地或隨機,優先本地。

    1. Shuffle Grouping: 隨機分組, 隨機派發stream里面的tuple,保證每個bolt接收到的tuple數目大致相同。
    2. FieldsGrouping:按字段分組,比如按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行為一致。

FieldGrouping和shuffleGrouping 運行過程分析:

FieldsGroup:你會發現相同的數據被分到相同的線程中。
95    word:am
95    word:am
95    word:am
95    word:am
95    word:am
91    word:love
91    word:love
91    word:love
91    word:love
91    word:love
95    word:am
89    word:i
89    word:hanmeimei
89    word:i
89    word:hanmeimei
89    word:i
93    word:lilei
93    word:lilei
93    word:lilei
93    word:lilei-----------------------------------
shuffleGroup:你會發現相同的數據被分到不同的線程中(數字代表線程id95    word:hanmeimei
89    word:love
95    word:hanmeimei
89    word:am
95    word:am
89    word:love
89    word:love
89    word:hanmeimei
89    word:am
95    word:love
95    word:hanmeimei
89    word:i
95    word:am
95    word:i
95    word:hanmeimei
95    word:i
95    word:hanmeimei
89    word:am
95    word:love
89    word:love
95    word:love

2、對應的的WordCount案例

2.1、功能說明
設計一個topology,來實現對文檔里面的單詞出現的頻率進行統計。
整個topology分為三個部分:

  • RandomSentenceSpout:數據源,在已知的英文句子中,隨機發送一條句子出去。
  • SplitSentenceBolt:負責將單行文本記錄(句子)切分成單詞
  • WordCountBolt:負責對單詞的頻率進行累加

執行wc時,通過Spout來讀取數據,然后通過Bolt來切分數據(如map階段)再通過另一個Bolt和上一個Bolt相連來進一步做單詞的統計(通過hashmap來實現)
2.2、項目主要流程
這里寫圖片描述
首先new TopologyBuilder->setSpout(spot的id,new spot的實現類,并發度)->setBolt(Bolt的id,new Bolt的實現類,并發度)<可設置多個Bolt>->new Config->config設置worker的數量。

2.3、RandomSentenceSpout的實現及生命周期
這里寫圖片描述
Spout的生命周期:open(初始化)->nextTuple(框架一直調用)->declareOutputFields(該方法用于聲明自己發射出去的數據的類型(自定義或者可以理解為標識自己發射出去的數據))

2.4、SplitSentenceBolt的實現及生命周期
這里寫圖片描述
Bolt的生命周期:prepare(初始化)->execute(對傳過來的tuple進行處理)->declareOutoutFields(聲明輸出的數據類型若輸出數據類型為多個則聲明多個如下圖所示(自定義))
2.5、WordCountBolt的實現及生命周期
這里寫圖片描述

代碼執行圖:
這里寫圖片描述

總結:

這篇文章最主要的目的還是讓讀者能夠對Storm的編程模型有個初步的認識;至少你得能夠看懂簡單的WC案例,知道里面各個參數的含義,以及整個程序的執行流程。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456640.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456640.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456640.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

13_觀察者模式

【觀察者模式】 也叫作發布/訂閱模式&#xff0c;使用較為頻繁。 定義了對象間一種一對多的依賴關系&#xff0c;當一個對象改變狀態時&#xff0c;則所有依賴于它的對象都會得到通知并被自動更新。 觀察者模式由以下幾個角色組成&#xff1a; * Subject 被觀察者 定義被觀察者…

【python】內建異常類的層次

內建異常類的層次 BaseException-- SystemExit-- KeyboardInterrupt-- GeneratorExit-- Exception-- StopIteration-- StopAsyncIteration-- ArithmeticError| -- FloatingPointError| -- OverflowError| -- ZeroDivisionError-- AssertionError-- AttributeError-- …

《黑客秘笈——滲透測試實用指南》—第2章2.3節 外部或內部的主動式信息收集...

本節書摘來自異步社區《黑客秘笈——滲透測試實用指南》一書中的第2章2.3節 外部或內部的主動式信息收集&#xff0c;作者【美】Peter Kim&#xff08;彼得 基姆&#xff09;,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 2.3 外部或內部的主動式信息收集黑客秘笈——…

Storm集群的安裝及簡單使用

目錄前言&#xff1a;1、集群部署的基本流程2、Storm常用操作命令&#xff08;了解&#xff09;3、Storm集群的進程及日志熟悉&#xff08;知道對應的日志的位置出了問題知道去哪找原因&#xff09;4、Storm源碼目錄分析&#xff08;重要&#xff09;總結&#xff1a; 目錄 前…

【python】錯誤、異常和文件---復習筆記

錯誤、異常和文件 1. 異常處理 錯誤指的是代碼有語法問題&#xff0c;無法解釋運行&#xff0c;必須改正后才能運行 如果代碼沒有語法問題&#xff0c;可以運行&#xff0c;但會出運行時的錯誤&#xff0c;例如除零錯誤&#xff0c;下標越界等問題&#xff0c;這種在運行期間…

關于使用百度ueditor時的一些問題

本來這些問題直接在百度貼吧里回答不就完事了,可是好死不死的,百度貼吧里老出現 未知錯誤&#xff0c;錯誤號&#xff1a;230274 看來還是算了,自己做一個隨筆記錄一下好了 關于我們獲取里面的內容時,老是會有一個<p>來包著,而且還老是多出來一個<br/> 這邊是這么處…

Storm的通信機制

目錄前言&#xff1a;1、Worker進程間通信原理2、Worker進程間技術(Netty、ZeroMQ)3、Worker 內部通信技術(Disruptor)總結&#xff1a; 目錄 前言&#xff1a; 這篇文章&#xff0c;博客主要介紹下Storm中Worker進程間和進程內部通信的原理和技術。整篇內容僅供了解&#x…

《Windows PowerShell實戰指南(第2版)》——1.4 搭建自己的實驗環境

本節書摘來自異步社區《Windows PowerShell實戰指南&#xff08;第2版&#xff09;》一書中的第1章&#xff0c;第1.4節&#xff0c;作者&#xff1a;【美】Don Jones&#xff08;道瓊斯&#xff09; , Jeffery Hicks&#xff08;杰弗瑞希克斯&#xff09;著&#xff0c;更多章…

已解決]求問not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9為什么不等于0呢???

not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9 ----> (not 1&#xff09;)or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9) ----> 0 or 0 or 4 or 6 or 9 ----> 0 or 4 or 6 or 9 ----> 4 or 6 or 9 4

C#外圍工具資源

1、MATH.NET數學庫:可以用于 矩陣計算方程求根插值擬合。。。2、轉載于:https://www.cnblogs.com/liq07lzucn/p/6227443.html

Storm程序的并發機制原理總結

文章目錄目錄前言&#xff1a;1、概念2、配置并行度總結&#xff1a;目錄 前言&#xff1a; 為了在以后的實踐中提高Storm程序執行的效率&#xff0c;我們還是有必要了解下對應的Storm程序的并發機制。&#xff08;哈哈&#xff0c;雖然以博主小菜鳥的水平還沒有接觸到這種提…

《無線網絡:理解和應對互聯網環境下網絡互連所帶來的挑戰》——第2章 無線生態系統 2.1無線標準化過程...

本節書摘來自華章出版社《無線網絡&#xff1a;理解和應對互聯網環境下網絡互連所帶來的挑戰》一書中的第2章&#xff0c;第2.1節&#xff0c;作者&#xff1a;&#xff08;美&#xff09;杰克L.伯班克&#xff08;Jack L. Burbank&#xff09;等著&#xff0c;更多章節內容可以…

Flask模板01

模板 在前面的示例中&#xff0c;視圖函數的主要作用是生成請求的響應&#xff0c;這是最簡單的請求。實際上&#xff0c;視圖函數有兩個作用&#xff1a;處理業務邏輯和返回響應內容。在大型應用中&#xff0c;把業務邏輯和表現內容放在一起&#xff0c;會增加代碼的復雜度和…

★數學上最大的數是多少?

數學上最大的數是多少&#xff1f; 怪羅科普 收藏(282)| 閱讀(117678)人類已經使用數長達千年之久。普遍認為&#xff0c;數的概念最先源于史前人類開始使用手指進行計數。這最終演變成符號語言&#xff0c;然后在沙子、墻壁和木頭等物體上作標記。 我們已經向前發展了一大步&…

Flask模板02

3.4 控制語句 常用的幾種控制語句&#xff1a; 模板中的if控制語句 app.route(/user) def user():user dongGereturn render_template(user.html,useruser)<html><head>{% if user %}<title> hello {{user}} </title>{% else %}<title> welc…

Storm任務提交過程及目錄樹介紹

目錄前言&#xff1a;1、Storm 任務提交的過程2、Storm相關的目錄樹總結&#xff1a; 目錄 前言&#xff1a; 對于任何一個組件來說&#xff0c;了解它相關的任務提交的過程是非常有必要的&#xff08;畢竟生產中遇到一些Bug時&#xff0c;你如果知道內部執行的過程&#xf…

《Adobe InDesign CS6中文版經典教程》—第1課1.5節修改文檔的縮放比例

本節書摘來自異步社區《Adobe InDesign CS6中文版經典教程》一書中的第1課1.5節修改文檔的縮放比例&#xff0c;作者【美】Adobe公司,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 1.5 修改文檔的縮放比例Adobe InDesign CS6中文版經典教程InDesign中的控件讓用戶能…

隨機生成一定范圍的隨機數

function randomNum(min,max) { return Math.ceil(Math.random()*(max-min)min); } min,max最小最大范圍數字。轉載于:https://www.cnblogs.com/kingzlz/p/6229586.html

【python】Flask視圖

2.1 從 Hello World 開始 Flask程序運行過程&#xff1a; 所有Flask程序必須有一個程序實例。 Flask調用視圖函數后&#xff0c;會將視圖函數的返回值作為響應的內容&#xff0c;返回給客戶端。一般情況下&#xff0c;響應內容主要是字符串和狀態碼。 當客戶端想要獲取資源…

大數據之Kafka入門簡介

目錄前言&#xff1a;1、Kafka是什么2、JMS是什么3、Kafka核心組件&#xff08;重點&#xff09;總結&#xff1a; 目錄 前言&#xff1a; 作為流式計算中的一個組件&#xff0c;對于它的組成以及運行的原理&#xff0c;學習者也需要相關的了解。以下主要簡單介紹了kafka是什…