Storm優勢就在于Storm是實時的連續性的分布式的計算框架,一旦運行起來,除非你將它殺掉,否則它一直處理計算或等待計算的狀態.Spark和hadoop都做不到.
當然它們各自都有其應用場景,各有各的優勢.可以配合使用.
下面我轉一份別人的資料,講的很清楚.
Storm與Spark、Hadoop這三種框架,各有各的優點,每個框架都有自己的最佳應用場景。
所以,在不同的應用場景下,應該選擇不同的框架。
Storm是最佳的流式計算框架,Storm由Java和Clojure寫成,Storm的優點是全內存計算,所以它的定位是分布式實時計算系統,按照Storm作者的說法,Storm對于實時計算的意義類似于Hadoop對于批處理的意義。
Storm的適用場景:
1)流數據處理
Storm可以用來處理源源不斷流進來的消息,處理之后將結果寫入到某個存儲中去。
2)分布式RPC。由于Storm的處理組件是分布式的,而且處理延遲極低,所以可以作為一個通用的分布式RPC框架來使用。
SparkSpark是一個基于內存計算的開源集群計算系統,目的是更快速的進行數據分析。Spark由加州伯克利大學AMP實驗室Matei為主的小團隊使用Scala開發開發,類似于Hadoop MapReduce的通用并行計算框架,Spark基于Map Reduce算法實現的分布式計算,擁有Hadoop MapReduce所具有的優點,但不同于MapReduce的是Job中間輸出和結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數據挖掘與機器學習等需要迭代的Map Reduce的算法。
Spark的適用場景:
1)多次操作特定數據集的應用場合
Spark是基于內存的迭代計算框架,適用于需要多次操作特定數據集的應用場合。需要反復操作的次數越多,所需讀取的數據量越大,受益越大,數據量小但是計算密集度較大的場合,受益就相對較小。
2)粗粒度更新狀態的應用
由于RDD的特性,Spark不適用那種異步細粒度更新狀態的應用,例如Web服務的存儲或者是增量的Web爬蟲和索引。就是對于那種增量修改的應用模型不適合。
總的來說Spark的適用面比較廣泛且比較通用。
Hadoop是實現了MapReduce的思想,將數據切片計算來處理大量的離線數據數據。Hadoop處理的數據必須是已經存放在HDFS上或者類似HBase的數據庫中,所以Hadoop實現的時候是通過移動計算到這些存放數據的機器上來提高效率。
Hadoop的適用場景:
1)海量數據的離線分析處理
2)大規模Web信息搜索
3)數據密集型并行計算
簡單來說:
Hadoop適合于離線的批量數據處理適用于對實時性要求極低的場景
Storm適合于實時流數據處理,實時性方面做得極好
Spark是內存分布式計算框架,試圖吞并Hadoop的Map-Reduce批處理框架和Storm的流處理框架,但是Spark已經做得很不錯了,批處理方面性能優于Map-Reduce,但是流處理目前還是弱于Storm,產品仍在改進之中