Storm介紹以及Hadoop和Storm的區別

Storm Hadoop 編程語言 HDFS 蒼茫漂漂 2017-03-31

根據官方文檔介紹,Storm有以下的特性:

Storm是一個開源的分佈式實時計算系統,可以簡單、可靠的處理大量的數據流。Storm有很多使用場景:如實時分析,在線機器學習,持續計算,分佈式RPC,ETL等等。Storm支持水平擴展,具有高容錯性,保證每個消息都會得到處理,而且處理速度很快(在一個小集群中,每個結點每秒可以處理數以百萬計的消息)。Storm的部署和運維都很便捷,而且更為重要的是可以使用任意編程語言來開發應用。

Storm介紹以及Hadoop和Storm的區別

Storm有如下特點:

  • 編程模型簡單

在大數據處理方面相信大家對hadoop已經耳熟能詳,基於Google Map/Reduce來實現的Hadoop為開發者提供了map、reduce原語,使並行批處理程序變得非常地簡單和優美。同樣,Storm也為大數據的實時計算提供了一些簡單優美的原語,這大大降低了開發並行實時處理的任務的複雜性,幫助你快速、高效的開發應用。

  • 可擴展

在Storm集群中真正運行topology的主要有三個實體:工作進程、線程和任務。Storm集群中的每臺機器上都可以運行多個工作進程,每個工作進程又可創建多個線程,每個線程可以執行多個任務,任務是真正進行數據處理的實體,我們開發的spout、bolt就是作為一個或者多個任務的方式執行的。 因此,計算任務在多個線程、進程和服務器之間並行進行,支持靈活的水平擴展。

  • 高可靠性 Storm可以保證spout發出的每條消息都能被“完全處理”,這也是直接區別於其他實時系統的地方,如S4。

請注意,spout發出的消息後續可能會觸發產生成千上萬條消息,可以形象的理解為一棵消息樹,其中spout發出的消息為樹根,Storm會跟蹤這棵消息樹的處理情況,只有當這棵消息樹中的所有消息都被處理了,Storm才會認為spout發出的這個消息已經被“完全處理”。如果這棵消息樹中的任何一個消息處理失敗了,或者整棵消息樹在限定的時間內沒有“完全處理”,那麼spout發出的消息就會重發。

考慮到儘可能減少對內存的消耗,Storm並不會跟蹤消息樹中的每個消息,而是採用了一些特殊的策略,它把消息樹當作一個整體來跟蹤,對消息樹中所有消息的唯一id進行異或計算,通過是否為零來判定spout發出的消息是否被“完全處理”,這極大的節約了內存和簡化了判定邏輯,後面會對這種機制進行詳細介紹。

這種模式,每發送一個消息,都會同步發送一個ack/fail,對於網絡的帶寬會有一定的消耗,如果對於可靠性要求不高,可通過使用不同的emit接口關閉該模式。

上面所說的,Storm保證了每個消息至少被處理一次,但是對於有些計算場合,會嚴格要求每個消息只被處理一次,幸而Storm的0.7.0引入了事務性拓撲,解決了這個問題,後面會有詳述。

  • 高容錯性

如果在消息處理過程中出了一些異常,Storm會重新安排這個出問題的處理單元。Storm保證一個處理單元永遠運行(除非你顯式殺掉這個處理單元)。

當然,如果處理單元中存儲了中間狀態,那麼當處理單元重新被Storm啟動的時候,需要應用自己處理中間狀態的恢復。

  • 支持多種編程語言

除了用java實現spout和bolt,你還可以使用任何你熟悉的編程語言來完成這項工作,這一切得益於Storm所謂的多語言協議。多語言協議是Storm內部的一種特殊協議,允許spout或者bolt使用標準輸入和標準輸出來進行消息傳遞,傳遞的消息為單行文本或者是json編碼的多行。

Storm支持多語言編程主要是通過ShellBolt, ShellSpout和ShellProcess這些類來實現的,這些類都實現了IBolt 和 ISpout接口,以及讓shell通過java的ProcessBuilder類來執行腳本或者程序的協議。

可以看到,採用這種方式,每個tuple在處理的時候都需要進行json的編解碼,因此在吞吐量上會有較大影響。

  • 支持本地模式

Storm有一種“本地模式”,也就是在進程中模擬一個Storm集群的所有功能,以本地模式運行topology跟在集群上運行topology類似,這對於我們開發和測試來說非常有用。

  • 高效

用ZeroMQ作為底層消息隊列, 保證消息能快速被處理。

Hadoop和Storm有什麼區別和聯繫呢:

Storm介紹以及Hadoop和Storm的區別

如果,你看懂了上圖,那麼你也未必看懂Hadoop與Storm的區別。從上圖基本可以看出,Hadoop是進行批量處理的,而Storm是進行流式處理。

接下來看一下具體Hadoop與Storm的區別:

1、數據來源

Hadoop是HDFS上某個文件夾下的數據,可能是成TB的數據,而Storm是實時新增的某一筆數據,這個數據可能很小隻有幾KB。

2、處理過程

Hadoop是分MAP階段到REDUCE階段,而Storm是由用戶定義處理流程,流程中可以包含多個步驟,每個步驟可以是數據源(SPOUT)或處理邏輯(BOLT)。

3、是否結束

Hadoop最後在Reduce執行結束後是要結束的,而Storm是沒有結束狀態,到最後一步時,就停在那裡,直到有新數據進入時再從頭開始。

4、處理速度

Hadoop是以處理HDFS上大量數據為目的,速度慢,而Storm是隻要處理新增的某一筆數據即可,可以做到很快。

5、適用場景

Hadoop是在要處理一批數據時用的,不講究時效性,要處理就提交一個Job,而Storm是要處理某一新增數據時用的,要講時效性。

6、MQ應用

Hadoop沒有應用MQ,故沒有太多需要描述,而Storm可以看作是有N個步驟,每個步驟處理完就向下一個MQ發送消息,監聽這個MQ的消費者繼續處

本人熱愛技術,喜歡交流學習,有什麼前瞻新技術大家一起加群(Q):131322610 溝通學習

Storm介紹以及Hadoop和Storm的區別

相關推薦

推薦中...