您好,登錄后才能下訂單哦!
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來的完善。實現起來非常麻煩。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。