大資料Storm相比於Spark、Hadoop有哪些優勢(摘錄)

風火資料發表於2018-06-01

一、可能很多初學大資料的夥伴不知道strom是什麼,先給大家介紹一下strom:
分散式實時計算系統,storm對於實時計算的意義類似於hadoop對於批處理的意義。
storm的適用場景。
流資料處理。Storm可以用來處理源源不斷流進來的訊息,處理之後將結果寫入到某個儲存中去。
分散式rpc。由於storm的處理元件是分散式的,而且處理延遲極低,所以可以作為一個通用的分散式rpc框架來使用。當然,其實我們的搜尋引擎本身也是一個分散式rpc系統
有一句話叫做三人行必有我師,其實做為一個開發者,有一個學習的氛圍
跟一個交流圈子特別重要這是一個我的大資料交流學習群531629188
不管你是小白還是大牛歡迎入駐,正在求職的也可以加入
,大家一起交流學習,話糙理不糙,互相學習,共同進步,一起加油吧。

二、然後我們再看下Storm、Spark、 Hadoop都有何特點

Storm: 分散式實時計算,強調實時性,常用於實時性要求較高的地方;
Hadoop:分散式批處理計算,強調批處理,常用於資料探勘、分析;
Spark:是一個基於記憶體計算的開源的叢集計算系統,目的是讓資料分析更加快速, Spark 是一種與 Hadoop 相似的開源叢集計算環境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負載方面表現得更加優越,換句話說,Spark 啟用了記憶體分佈資料集,除了能夠提供互動式查詢外,它還可以優化迭代工作負載。
三、strom的優勢

  1. 簡單程式設計
    在大資料處理方面相信大家對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更靈活.。
  2. 多語言支援
    除了用java實現spout和bolt,你還可以使用任何你熟悉的程式語言來完成這項工作,這一切得益於Storm所謂的多語言協議。多語言協議是Storm內部的一種特殊協議,允許spout或者bolt使用標準輸入和標準輸出來進行訊息傳遞,傳遞的訊息為單行文字或者是json編碼的多行。
    Storm支援多語言程式設計主要是通過ShellBolt,ShellSpout和ShellProcess這些類來實現的,這些類都實現了IBolt 和 ISpout介面,以及讓shell通過java的ProcessBuilder類來執行指令碼或者程式的協議。
    可以看到,採用這種方式,每個tuple在處理的時候都需要進行json的編解碼,因此在吞吐量上會有較大影響。
  3. 支援水平擴充套件
    在Storm叢集中真正執行topology的主要有三個實體:工作程式、執行緒和任務。Storm叢集中的每臺機器上都可以執行多個工作程式,每個工作程式又可建立多個執行緒,每個執行緒可以執行多個任務,任務是真正進行資料處理的實體,我們開發的spout、bolt就是作為一個或者多個任務的方式執行的。
    因此,計算任務在多個執行緒、程式和伺服器之間並行進行,支援靈活的水平擴充套件。
  4. 容錯性強
    如果在訊息處理過程中出了一些異常,Storm會重新安排這個出問題的處理單元。Storm保證一個處理單元永遠執行(除非你顯式殺掉這個處理單元)。
  5. 可靠的訊息保證
    Storm可以保證spout發出的每條訊息都能被“完全處理”,這也是直接區別於其他實時系統的地方,如S4。
  6. 快速的訊息處理
    用ZeroMQ作為底層訊息佇列, 保證訊息能快速被處理
  7. 本地模式,支援快速程式設計測試
    Storm有一種“本地模式”,也就是在程式中模擬一個Storm叢集的所有功能,以本地模式執行topology跟在叢集上執行topology類似,這對於我們開發和測試來說非常有用。


相關文章