您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關storm有什么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
storm介紹
全量數據處理使用的大多是鼎鼎大名的hadoop或者hive,作為一個批處理系統,hadoop以其吞吐量大、自動容錯等優點,在海量數據處理上得到了廣泛的使用。但是,hadoop不擅長實時計算,因為它天然就是為批處理而生的。storm區別于hadoop,在Storm中,一個實時應用的計算任務被打包作為Topology發布,這同Hadoop的MapReduce任務相似。但是有一點不同的是:在Hadoop中,MapReduce任務最終會執行完成后結束;而在Storm中,Topology任務一旦提交后永遠不會結束,除非你顯示去停止任務,用在實時的流式計算中,被廣泛用來進行實時日志處理、實時統計、實時風控等場景,當然也可以用在對數據進行實時初步的加工,存儲到分布式數據庫中如HBase,便于后續的查詢。面對的大批量的數據的實時計算,storm實現了一個可擴展的、低延遲、可靠性和容錯的分布式計算平臺。
storm組件
Storm集群主要由一個主節點和一群工作節點(worker node)組成,通過 Zookeeper進行協調。
主節點:
主節點通常運行一個后臺程序 —— Nimbus,主控節點,負責在集群中發布代碼,分配工作給機器,并且監聽狀態。
工作節點:
工作節點同樣會運行一個后臺程序 —— Supervisor,用于收聽工作指派并基于要求運行工作進程。每個工作節點都是topology中一個子集的實現。而Nimbus和Supervisor之間的協調則通過Zookeeper系統或者集群。
Zookeeper:
Zookeeper是完成Supervisor和Nimbus之間協調的服務。Nimbus的守護進程和Supervisors守護進程是無法連接和無狀態的;所有的狀態維持在Zookeeper中 或保存在本地磁盤上。這意味著你可以 kill -9 Nimbus 或Supervisors 進程,所以他們不需要做備份。這種設計導致Storm集群具有令人難以置信的穩定性。而應用程序實現實時的邏輯則被封裝進Storm中的“topology”。topology則是一組由Spouts(數據源)和Bolts(數據操作)通過Stream Groupings進行連接的圖。
下面對出現的術語進行更深刻的解析。
Spout:
簡而言之,Spout從來源處讀取數據并放入topology。Spout分成可靠和不可靠兩種;當Storm接收失敗時,可靠的Spout會對tuple(元組,數據項組成的列表)進行重發;而不可靠的Spout不會考慮接收成功與否只發射一次。而Spout中最主要的方法就是nextTuple(),該方法會發射一個新的tuple到topology,如果沒有新tuple發射則會簡單的返回。
Bolt:
Topology中所有的處理都由Bolt完成。Bolt可以完成任何事,比如:連接的過濾、聚合、訪問文件/數據庫、等等。Bolt從Spout中接收數據并進行處理,如果遇到復雜流的處理也可能將tuple發送給另一個Bolt進行處理。而Bolt中最重要的方法是execute(),以新的tuple作為參數接收。不管是Spout還是Bolt,如果將tuple發射成多個流,這些流都可以通過declareStream()來聲明。
Stream Groupings:
Stream Grouping定義了一個流在Bolt任務間該如何被切分。這里有Storm提供的6個Stream Grouping類型:
1. 隨機分組(Shuffle grouping):隨機分發tuple到Bolt的任務,保證每個任務獲得相等數量的tuple。
2. 字段分組(Fields grouping):根據指定字段分割數據流,并分組。例如,根據“user-id”字段,相同“user-id”的元組總是分發到同一個任務,不同“user-id”的元組可能分發到不同的任務。
3. 全部分組(All grouping):tuple被復制到bolt的所有任務。這種類型需要謹慎使用。
4. 全局分組(Global grouping):全部流都分配到bolt的同一個任務。明確地說,是分配給ID最小的那個task。
5. 無分組(None grouping):你不需要關心流是如何分組。目前,無分組等效于隨機分組。但最終,Storm將把無分組的Bolts放到Bolts或Spouts訂閱它們的同一線程去執行(如果可能)。
6. 直接分組(Direct grouping):這是一個特別的分組類型。元組生產者決定tuple由哪個元組處理者任務接收。
當然還可以實現CustomStreamGroupimg接口來定制自己需要的分組。
storm流程
Storm是一個分布式的,可靠的,容錯的數據流處理系統。它會把工作任務委托給不同類型的組件,每個組件負責處理一項簡單特定的任務。Storm集群的輸入流由一個被稱作spout的組件管理,spout把數據傳遞給bolt, bolt要么把數據保存到某種存儲器,要么把數據傳遞給其它的bolt。你可以想象一下,一個Storm集群就是在一連串的bolt之間轉換spout傳過來的數據。
這里用一個簡單的例子來說明這個概念。昨晚我在新聞節目里看到主持人在談論政治人物和他們對于各種政治話題的立場。他們一直重復著不同的名字,而我開始考慮這些名字是否被提到了相同的次數,以及不同次數之間的偏差。
想像播音員讀的字幕作為你的數據輸入流。你可以用一個spout讀取一個文件(或者socket,通過HTTP,或者別的方法)。文本行被spout傳給一個bolt,再被bolt按單詞切割。單詞流又被傳給另一個bolt,在這里每個單詞與一張政治人名列表比較。每遇到一個匹配的名字,第二個bolt為這個名字在數據庫的計數加1。你可以隨時查詢數據庫查看結果, 而且這些計數是隨著數據到達實時更新的。所有組件(spouts和bolts)及它們之間的關系請參考拓撲圖1-1
storm架構圖
storm拓撲圖
storm整體架構圖
storm作業架構圖
關于“storm有什么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。