1. 程式人生 > >Spark技術體系與MapReduce,Hive,Storm幾種技術的關係與區別

Spark技術體系與MapReduce,Hive,Storm幾種技術的關係與區別

大資料體系架構:

Spark記憶體計算與傳統MapReduce區別:

SparkSQL與Hive的區別:

SparkSQL替換的是Hive的查詢引擎,Hive是一種基於HDFS的資料倉庫,並且提供了基於SQL模型的,針對存了大資料的資料倉庫,進行分散式互動查詢的查詢引擎,所以SparkSQL暫時並不能完全替代Hive,實際上,在生產環境中,SparkSQL也是針對Hive資料倉庫中的資料進行查詢,Spark本身自己不提供儲存,自然不可能替代Hive作為資料倉庫的功能。這也印證了,SparkSQL只是替代hive的查詢引擎,但是hive構建資料倉庫的地位,SparkSQL並不能替代。

SparkSQL一個優點,較於Hive的查詢引擎,就是速度快,原因很簡單,hivesql執行底層還是用MapReduce來實現,必須經過shuffle過程(效能損耗最大,走磁碟),所以速度是很緩慢的,一些複雜的HiveSQL需要一個小時以上的時間才能執行完。但是SparkSQL由於其底層基於Spark自身的基於記憶體的特點,所以速度是Hive查詢引擎的幾倍以上。

另外,SparkSQL支援大量不同的資料來源,無論是關係型資料庫還是文字檔案,例如json,parquet,jdbc等等,同時,SparkSQL基於RDD來工作,可以與spark的其他元件無縫整合,實現許多較為複雜的功能,例如,sparksql可以直接針對hdfs檔案進行執行sql語句。

Spark Streaming與Storm的區別:

Storm是一個純粹的實時計算框架,而SparkStreaming是一個準實時計算框架

Storm是來一條資料就會處理一條資料,真正做到了實時處理;但是SparkStreaming需要將一段時間內的,例如1s內的資料收集起來,作為一個RDD,然後針對這個資料batch進行處理。另外,Storm的一項高階特性是SparkStreaming不具備的,就是Storm在支援分散式流式計算程式(Topology)在執行的過程中,可以動態調整並行度,從而提高併發處理的能力,而SparkStreaming是無法動態的調整並行度的。

SparkStreaming的優點(其實也就是對應了Storm缺點)是,SparkStreaming的計算吞吐量相較於Storm是幾倍甚至是十幾倍的差距,原因就是:SparkStreaming基於batch進行批處理的,所以相較於Storm的基於單條資料進行處理,效率高出很多!

另外,從技術生態圈角度看,SparkStreaming處理Spark生態體系中,可以與SparkCore,SparkSQL,甚至是SparkMLib,SparkGraphx進行無縫整合,流式處理完的資料,可以立即進行各種map,reduce轉換操作,可以立即使用sql進行查詢,甚至可以使用machine learning或者圖計算演算法進行處理。這種一站式的大資料處理功能和優勢,是Storm無法匹敵的。

二者適用場景:

對於實時性要求特別高的需求,並且實時資料量不穩定,比如在白天有高峰期的情況下,可以使用Storm,例如實時計費系統;如果對於實時性要求一般,假設允許1s的準實時處理,並且不要求動態調整並行度的話,選擇SparkStreaming將會是一個更好的選擇。

如果僅僅要求資料進行簡單的流式計算處理,那麼storm或者sparkstreaming都無可厚非,但是如果對於流式計算的中間結果(就是SparkRDD)進行復雜的後續處理,那麼使用spark會更合適一些,因為spark本身提供了很多函式,例如map,reduce,reduceByKey,groupByKey,filter等等。