一、可能很多初學大數據的伙伴不知道strom是什麼,先給大家介紹一下strom: 分散式實時計算系統,storm對於實時計算的意義類似於hadoop對於批處理的意義。 storm的適用場景。 流數據處理。Storm可以用來處理源源不斷流進來的消息,處理之後將結果寫入到某個存儲中去。 分散式rpc。由 ...
一、可能很多初學大數據的伙伴不知道strom是什麼,先給大家介紹一下strom:
分散式實時計算系統,storm對於實時計算的意義類似於hadoop對於批處理的意義。
storm的適用場景。
流數據處理。Storm可以用來處理源源不斷流進來的消息,處理之後將結果寫入到某個存儲中去。
分散式rpc。由於storm的處理組件是分散式的,而且處理延遲極低,所以可以作為一個通用的分散式rpc框架來使用。當然,其實我們的搜索引擎本身也是一個分散式rpc系統
有一句話叫做三人行必有我師,其實做為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要這是一個我的大數據交流學習群531629188
不管你是小白還是大牛歡迎入駐,正在求職的也可以加入
,大家一起交流學習,話糙理不糙,互相學習,共同進步,一起加油吧。
二、然後我們再看下Storm、Spark、 Hadoop都有何特點
Storm: 分散式實時計算,強調實時性,常用於實時性要求較高的地方;
Hadoop:分散式批處理計算,強調批處理,常用於數據挖掘、分析;
Spark:是一個基於記憶體計算的開源的集群計算系統,目的是讓數據分析更加快速, Spark 是一種與 Hadoop 相似的開源集群計算環境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負載方面表現得更加優越,換句話說,Spark 啟用了記憶體分佈數據集,除了能夠提供互動式查詢外,它還可以優化迭代工作負載。
三、strom的優勢
簡單編程
在大數據處理方面相信大家對hadoop已經耳熟能詳,基於GoogleMap/Reduce來實現的Hadoop為開發者提供了map、reduce原語,使並行批處理程式變得非常地簡單和優美。同樣,Storm也為大數據的實時計算提供了一些簡單優美的原語,這大大降低了開發並行實時處理的任務的複雜性,幫助你快速、高效的開發應用。
Spark提供的數據集操作類型有很多種,不像Hadoop只提供了Map和Reduce兩種操作。比如map,filter, flatMap,sample, groupByKey, reduceByKey, union, join, cogroup,mapValues, sort,partionBy等多種操作類型,他們把這些操作稱為Transformations。同時還提供Count, collect, reduce, lookup, save等多種actions。這些多種多樣的數據集操作類型,給上層應用者提供了方便。各個處理節點之間的通信模型不再像Hadoop那樣就是唯一的Data Shuffle一種模式。用戶可以命名,物化,控制中間結果的分區等。可以說編程模型比Hadoop更靈活.。
多語言支持
除了用java實現spout和bolt,你還可以使用任何你熟悉的編程語言來完成這項工作,這一切得益於Storm所謂的多語言協議。多語言協議是Storm內部的一種特殊協議,允許spout或者bolt使用標準輸入和標準輸出來進行消息傳遞,傳遞的消息為單行文本或者是json編碼的多行。
Storm支持多語言編程主要是通過ShellBolt,ShellSpout和ShellProcess這些類來實現的,這些類都實現了IBolt 和 ISpout介面,以及讓shell通過java的ProcessBuilder類來執行腳本或者程式的協議。
可以看到,採用這種方式,每個tuple在處理的時候都需要進行json的編解碼,因此在吞吐量上會有較大影響。
支持水平擴展
在Storm集群中真正運行topology的主要有三個實體:工作進程、線程和任務。Storm集群中的每台機器上都可以運行多個工作進程,每個工作進程又可創建多個線程,每個線程可以執行多個任務,任務是真正進行數據處理的實體,我們開發的spout、bolt就是作為一個或者多個任務的方式執行的。
因此,計算任務在多個線程、進程和伺服器之間並行進行,支持靈活的水平擴展。
容錯性強
如果在消息處理過程中出了一些異常,Storm會重新安排這個出問題的處理單元。Storm保證一個處理單元永遠運行(除非你顯式殺掉這個處理單元)。
可靠的消息保證
Storm可以保證spout發出的每條消息都能被“完全處理”,這也是直接區別於其他實時系統的地方,如S4。
快速的消息處理
用ZeroMQ作為底層消息隊列, 保證消息能快速被處理
本地模式,支持快速編程測試
Storm有一種“本地模式”,也就是在進程中模擬一個Storm集群的所有功能,以本地模式運行topology跟在集群上運行topology類似,這對於我們開發和測試來說非常有用。