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