簡單對比Spark和Storm


2013年參與開發了一個類似storm的自研系統, 2014年使用過spark 4個多月,對這兩個系統都有一些了解。

下面是我關於這兩個系統的簡單對比:

Spark:

1. 基於數據並行,https://en.wikipedia.org/wiki/Data_parallelism。相同的操作作用在數據的不同部分,利用transformation的pipeline提高性能。

2. 本質上是batch processing,latency 通常> 1s。

3. RDD是spark的核心,封裝了分布式的細節,即partition和根據lineage恢復數據。shuffle牽涉到數據在網絡間的移動,為了容錯,中間結果要落地磁盤,因此在一些應用中會是瓶頸。

4. RDD是immutable和coarse granularity,簡化了設計。

5. 比較像優化(擴展)了MapReduce的計算框架,並將數據放進了內存,加速迭代計算,非常適合於迭代式應用,比如機器學習,adhoc查詢,圖計算等。

Storm:

1. 基於任務並行。https://en.wikipedia.org/wiki/Task_parallelism。請求(或者說event)流進系統依次被topology上的task執行。不同task是並行(concurrent)執行。

2. 本質是realtime processing, latency 通常 < 1s。(Storm Trident支持批處理)。

3. 資源管理(在哪些機器上起task)和task間通信是storm的核心。

4. 比較像傳統的實時后台系統多個模塊(application)拼接成一個大的應用。

 

所以,可以看到spark和storm有不同的應用場景。能和storm比較的是spark streaming. spark streaming是一個spark的流式處理器,

基本的原理是:將一個時間窗口的數據收集起來,轉換成RDD,再根據業務邏輯生成新的RDD,最后遍歷結果RDD,把數據發出去。

spark streaming是一個分布式系統,也有分布式系統的復雜性。比如,receiver failure的時候,可能會丟數據。

 

參考資料:

1. spark paper。http://www.cs.berkeley.edu/~matei/papers/2012/nsdi_spark.pdf

2. committer的報告。Yahoo compares Storm and Spark。http://www.slideshare.net/ChicagoHUG/yahoo-compares-storm-and- spark?ref=http://yahoohadoop.tumblr.com/post/98213421641/storm-and-spark-at-yahoo-why-chose-one-over-the

3. committer的報告。storm和spark streaming的對比。http://www.slideshare.net/ptgoetz/apache-storm-vs-spark-streaming


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM