實時大數據頂級分析工具Storm圖文解析
許多分散式計算系統都可以實時或者接近實時地處理大數據流。今天,我們將為大家介紹一個非常有效的開源實時計算工具——Storm
Storm 與Hadoop的區別
Storm 與Hadoop最大的不同之處在於它的處理方式。Hadoop 在本質上是一個批處理系統。數據被引入Hadoop 文件系統(HDFS) 並分發到各個節點進行處理。當處理完成時,結果數據返回到 HDFS 供始發者使用。Storm 支持創建拓撲結構來轉換沒有終點的數據流。不同於 Hadoop 作業,這些轉換從不停止,它們會持續處理到達的數據。
你也可以將它們形象地理解為桶裝水與自來水的區別。Hadoop需要一份一份地進行打包、處理、搬運,通常來說,從「水源水」到「飲用水」需要等待比較長的一段時間。Storm則建立了一套管網系統,管網系統中可以任意地添加「水」處理環節,或者安裝「水龍頭」進行數據輸入和輸出,從而整個處理過程變得更加流暢、快捷。
Storm相關基礎概念
在Storm的集群裡面有兩種節點:控制節點(master node)和工作節點(worker node)。控制節點上面運行一個後台程序:Nimbus,它的作用類似Hadoop裡面的JobTracker。Nimbus負責在集群裡面分布代碼,分配工作給機器,並且監控狀態。
每一個工作節點上面運行一個叫做Supervisor的節點(類似 TaskTracker)。Supervisor會監聽分配給它那台機器的工作,根據需要啟動/關閉工作進程。每一個工作進程執行一個Topology(類似 Job)的一個子集;一個運行的Topology由運行在很多機器上的很多工作進程Worker(類似Child)組成。
storm topology結構
(一)Topologies
為了在storm上面做實時計算,需要建立一些圖狀結構,我們稱之為(topologies)。一個topology是spouts和bolts組成的圖,其中spout負責發送消息,負責將數據流以tuple元組的形式發送出去;而bolt則負責轉換這些數據流,在bolt中可以完成計算、過濾等操作,bolt自身也可以隨機將數據發送給其他bolt。
Spouts和bolts通過stream groupings(定義一個流在Bolt任務間該如何被切分)連接起來,我們也可以將它理解為一個由無限制的處理節點組成的圖狀結構。Topology裡面的每個處理節點都包含處理邏輯,而節點之間的連接則表示數據流動的方向。
(二)Stream groupings
定義一個topology的其中一步是定義每個bolt接收什麼樣的流作為輸入。stream grouping就是用來定義一個stream應該如果分配數據給bolts上面的多個tasks。
(三)Streams
消息流stream是storm里的關鍵抽象。一個消息流是一個沒有邊界的tuple序列( tuple是一個類似於列表的東西,存儲的每個元素叫做field),而這些tuple序列會以一種分散式的方式並行地創建和處理。通過對stream中tuple序列中每個欄位命名來定義stream。
(四)Spouts
消息源spout是Storm裡面一個topology裡面的消息生產者。一般來說消息源會從一個外部源讀取數據並且向topology裡面發出消息:tuple。Spout可以是可靠的也可以是不可靠的。如果這個tuple沒有被storm成功處理,可靠的消息源spouts可以重新發射一個tuple,但是不可靠的消息源spouts一旦發出一個tuple就不能重發了。
(五)Bolts
所有的消息處理邏輯被封裝在bolts裡面。Bolts可以做很多事情:過濾,聚合,查詢資料庫等等。
Bolts可以簡單的做消息流的傳遞。複雜的消息流處理往往需要很多步驟,從而也就需要經過很多bolts。比如算出一堆圖片裡面被轉發最多的圖片就至少需要兩步:第一步算出每個圖片的轉發數量。第二步找出轉發最多的前10個圖片。(如果要把這個過程做得更具有擴展性那麼可能需要更多的步驟)。
Storm應用優勢
(一)易擴展
在 Storm集群中真正運行topology的主要有三個實體:工作進程、線程和任務。Storm集群中的每台機器上都可以運行多個工作進程,每個工作進程又可創建多個線程,每個線程可以執行多個任務,任務是真正進行數據處理的實體,spout、bolt就是作為一個或者多個任務的方式執行的。
因此,計算任務在多個線程、進程和伺服器之間並行進行,支持靈活的水平擴展,用戶通過追加機器就能提供並發數進而提高處理能力。
(二)高性能,低延遲
Storm採用內存計算模式,無需藉助文件存儲,直接通過網路直傳中間計算結果,避免了組件之間傳輸數據的大量時間損耗?數據從產生到最終能看到結果,也就是秒,甚至是毫秒的延遲。
當計算模型比較適合流式時,storm的流式處理,省去了批處理的收集數據的時間;
在將Topology提交到Storm集群的時候,集群會針對該Topology做一次初始化的工作?此後,在Topology運行過程中,對於輸入數據而言,是沒有計算框架初始化耗時的,有效避免了計算框架初始化的時間損耗?
(三)高容錯
流處理系統的容錯性比批處理系統更難實現。當批處理系統中出現錯誤時,只需要把失敗的部分簡單重啟即可;但對於流處理系統,出現錯誤就很難恢復,因為線上許多作業都是7 x 24小時運行的,數據在源源不斷地輸入。另外,流處理系統面臨的另外一個挑戰是狀態一致性,因為重啟後會出現重複數據,並且不是所有的狀態操作是冪等的,所以容錯性很難實現。
消息傳輸保障一般有三種:at most once,at least once和exactly once。At most once的消息傳輸機制是每條消息傳輸零次或者一次,即消息可能會丟失;At least once意味著每條消息會進行多次傳輸嘗試,至少一次成功,即消息傳輸可能重複但不會丟失;Exactlyonce的消息傳輸機制是每條消息有且只有一次,即消息傳輸既不會丟失也不會重複。
Storm的高容錯機制還體現在它能夠自動處理進程、機器、網路等異常。
當一個worker死掉,那麼supervisor會重新啟動這個worker。如果它總是啟動失敗將不能發送心跳到nimbus,那麼nimbus將把這個worker分配到另一台機器上。
當一個節點死掉,或者與節點間連接的網路出現故障時,分配給這台機器的任務將會超時,那麼nimbus將會把任務重新分配到其他機器。
Nimbus和Supervisor被設計成快速失敗的(當發生任何意外情況時進程將自己結束)和無狀態的(所有的狀態都存在zookeeper里或者磁碟上)。當啟動一個storm群集時,Nimbus和Supervisor進程將使用進程工具或監視工具來運行一個守護進程。因此,當Nimbus和Supervisor進程死掉時,守護進程會重啟它們就像什麼都沒發生過。
如果丟失了nimbus節點,worker將會繼續運行程序,另外,supervisors 將會繼續重啟失敗的worker。但是,如果一直沒有nimbus,當需要的時候worker將不能被分配給其他機器(例如有一台worker機器丟失的情況)。
因此,nimbus近乎是一個單點故障,在實踐中,這並不是一個大問題,當nimbus節點丟失時,並不會有什麼災難發生。Storm也有計劃在未來提高nimbus的高可用性。
Storm的三大類應用
(一)信息流處理
Storm可用來實時處理新數據和更新資料庫,兼具容錯性和可擴展性。即Storm可以用來處理源源不斷流進來的消息,處理之後將結果寫入到某個存儲中去。(二)連續計算
Storm可進行連續查詢並把結果即時反饋給客戶端。比如把Twitter上的熱門話題發送到瀏覽器中。(三)分散式遠程程序調用
Storm可用來並行處理密集查詢。Storm的拓撲結構是一個等待調用信息的分布函數,當它收到一條調用信息後,會對查詢進行計算,並返回查詢結果。舉個例子Distributed RPC可以做並行搜索或者處理大集合的數據。版權申明:本文由智慧思特編輯整理,如需轉載,可申請授權。部分圖片來自網路,侵刪。
http://weixin.qq.com/r/bzizq0vE7haRrQ-I9219 (二維碼自動識別)
》》》更多精彩文章
-
天了嚕!這些巨頭都成了Docker粉
Spark:取代MapReduce的大數據處理平台
-
由淺入深理解MapReduce
-
DevOps的前世今生
-
【深度長文】Hadoop生態圈介紹及入門
-
技術大咖解析兩款頂級大數據分析引擎:Flink與Spark有何異同
-
科普:2分鐘讀懂大數據框架Hadoop和Spark的異同
推薦閱讀:
※#斯帝羅蘭 家有女神# 互動有獎
※一文讀懂股票質押業務
※整容級演技,奧斯卡影帝「狗爹」當之無愧
※20部三月新片快收好!(3部必刷)
TAG:軟文 |