1. 程式人生 > >spark和hive storm mapreduce的比較

spark和hive storm mapreduce的比較

大數據

Spark Streaming與Storm都可以用於進行實時流計算。但是他們兩者的區別是非常大的。其中區別之一
就是,Spank Streaming和Stom的計算模型完全不一樣,Spark Streaming是基於RDD的,因此需要將一小段時間內的,比如1秒內的數據,收集起來,作為一個RDD.然後再針對這個batch的數據進行處理。而Storm卻可以做到每來一條數據, 都可以立即進行處理和計算。 因此,Spark Streaming實際上嚴格意義上來說,只能稱作準實時的流計算框架,而Storm是真正意義上的實時計算框架。
此外,Storm支 持的一項高級特性,是Spark Streamng暫時不具備的,即Storm支持在分布式流式計算程序(Topology) 在運行過程中,可以動態地調整並行度。從而動態提高並發處理能力。而SparkSreaming是無法動態調整並行度的。
但是Spark Streaming也有其優點,首先Spark Streaming由於是基Fbatch進行處理的,因此相較於Stom基於單條數據進行處理,具有數倍甚至效十倍的吞吐量。
此外,Spark Streaming由於也身處於Spark生態圈內,因此Spark Streaming可以與Spark Core.SparkSQl.甚至是Spark MLuib Spark GraphX進行無維整合.流式處理完的數據,可以立即進行各種購Bmap. reduce轉換操作, 可以立即使用sqi進行查詢,甚至可以立即使用machne laming或者圖計算算法進行處理。這種一站式的大數據處理功能和優勢,是Slorm無法匹敵的。
因此,綜合上述來看,通常在對實時性要求特別高、而且實時數據量不穩定,比如在白天有高峰期的情況下,可以選擇使用Storm.但是如果是對實時性要求一般,允許1秒的準實時處理,而且不要求動態調被並行度的話, 選擇Spark Streamng是更好的選擇。

Spark SQL實際上並不能完全替代Hive.因為Hive是一種基FHDFS的數據倉庫,並且提供了基於QL模型的,針對存儲了大數據的數據倉庫,進行分布式交互查詢的查詢引擎。
嚴格的來說,Spark SQL能夠替代的,是Hive的查詢引擎,而不是Hive本身, 實際上即使在生產環境Spark SQL也是針對Hive數據倉庫中的數據進行查詢,Spark本身自己是不提供存儲的, 自然也不可能參代Hive作為數據倉庫的這個功能。

Spark SQL的一個優點,相較於Hive查詢引擎來說,就是速度快,同樣的SQL語句,可能使用Hive的量詢引擎,由於其底層基於MapReduce. 必須經過shutfhe過程走進盤, 因此速度是非常緩慢的。很多復雜的SQL語句。在hive中執行都需要一個小時以上的時間。而SparkSQL由於其底層基幹Spak自身的基於內存的特點,因此速度達到了Hive查詢引擎的數倍以上。
但是Spark SQL由於與Spark一樣。是大數據領域的新起的新秀,因此還不夠完善,有少量的Hive支持的高級特性,Spark SQL還不支持,導致Spark SQL暫時還不能完全替代Hive的查詢引擎。而只能在部分Spark SQL功能特性可以滿足需求的場景下,進行使用。
而Spark SQL相較於Hive的另外一個優點,就是支持大量不同的數據源,包括hive.json. parquet、 jdbc等等。此外,Spark SQL由於身處Spark技術堆棧內,也是基於RDD來工作,因此可以與Spark的其他組件無縫整合使用,配合起來實現許多復雜的功能。比如. Spark SQL支持可以直接針對hdts文件執行sql語句!

MapReduce能夠完成的各種離線批處理功能,以及常見算法(比如二次排序、topn等),基於Spark RDD的核心編程,都可以實現,並且可以更好地、更容易地實現。而且基於Spark RDD編寫的高線批處理程序,運行速度是MapReduce的數倍。速度上有非常明顯的優勢。
Spark相較於MapReduce速度快的最主要原因就在於,MapReduce的計算模型太死板,必須是mapreduce模式,有時候即使完成一些諸如過減之類的操作,也必須經過map reduce過程,這樣就必須經過shufle過程。而MapReduce的shffle過程是最消耗性能的,因為shuffe中間的過程必須基於進盤來讀寫。而Spark的shuthe雖然也要基於磁盤,但是其大量ransformation操作, 比如單純的map或者hiter等操作,可以直接基於內存進行pipeline操作,速度性能自然大大提升。
但是Spark也有其劣勢。由於Spark基於內存進行計算,雖然開發容易,但是真正面對大數據的時候(比如一次操作針對10億以上級別),在沒有進行調優的情況下,可能會出現各種各樣的問題,比如OOM內存溢出等等。導致Spark程序可能都無法完全運行起來,就報惜掛掉了,而MapReduce即使是運行緩慢,但是至少可以慢慢運行完。
此外,Spark由於是新崛起的技術新秀,因此在大數據領域的完善程度,肯定不如MapReduce.比如基於HBase、Hive作為離線批處理程序的輸入輸出,Spark就遠設有MapReduce來的完善。實現起來非常麻煩。

spark和hive storm mapreduce的比較