spark是一種通用的大資料計算框架,正如傳統大資料技術hadoop的mapreduce、hive引擎以及storm流式實時計算引擎等。
spark包含了大資料領域常見的各種計算框架:比如spark core用於離線計算,spark sql用於互動式查詢,spark streaming用於實時流式計算,spark mllib用於機器學習,spark graphx用於圖計算。
spark主要用於大資料的計算,而hadoop以後主要用於大資料的儲存(比如hdfs、hive、hbase等),以及資源排程(yarn)。
spark+hadoop的組合,是未來大資料領域最熱門的組合,也是最有前景的組合!
spark是一種"one stack to rule them all"的大資料計算框架,期望使用乙個技術堆疊就完美地解決大資料領域的各種計算任務。apache官方對spark的定義就是:通用的大資料快速處理引擎。
spark使用spark rdd、spark sql、spark streaming、mllib、graphx成功解決了大資料領域中,離線批處理、互動式查詢、實時流計算、機器學習與圖計算等最重要的任務和問題。
spark除了一站式的特點之外,另外乙個最重要的特點,就是基於記憶體進行計算,從而讓它的速度可以達到mapreduce、hive的數倍甚至數十倍!
現在已經有很多大公司正在生產環境下深度地使用spark作為大資料的計算框架,包括ebay、yahoo!、bat、網易、京東、華為、大眾點評、優酷土豆、搜狗等等。
spark同時也獲得了多個世界頂級it廠商的支援,包括ibm、intel等。
mapreduce能夠完成的各種離線批處理功能,以及常見演算法(比如二次排序、topn等),基於spark rdd的核心程式設計,都可以實現,並且可以更好地、更容易地實現。而且基於spark rdd編寫的離線批處理程式,執行速度是mapreduce的數倍,速度上有非常明顯的優勢。
spark相較於mapreduce速度快的最主要原因就在於,mapreduce的計算模型太死板,必須是map-reduce模式,有時候即使完成一些諸如過濾之類的操作,也必須經過map-reduce過程,這樣就必須經過shuffle過程。而mapreduce的shuffle過程是最消耗效能的,因為shuffle中間的過程必須基於磁碟來讀寫。而spark的shuffle雖然也要基於磁碟,但是其大量transformation操作,比如單純的map或者filter等操作,可以直接基於記憶體進行pipeline操作,速度效能自然大大提公升。
但是spark也有其劣勢。由於spark基於記憶體進行計算,雖然開發容易,但是真正面對大資料的時候(比如一次操作針對10億以上級別),在沒有進行調優的情況下,可能會出現各種各樣的問題,比如oom記憶體溢位等等。導致spark程式可能都無法完全執行起來,就報錯掛掉了,而mapreduce即使是執行緩慢,但是至少可以慢慢執行完。
此外,spark由於是新崛起的技術新秀,因此在大資料領域的完善程度,肯定不如mapreduce,比如基於hbase、hive作為離線批處理程式的輸入輸出,spark就遠沒有mapreduce來的完善。實現起來非常麻煩。
spark sql實際上並不能完全替代hive,因為hive是一種基於hdfs的資料倉儲,並且提供了基於sql模型的,針對儲存了大資料的資料倉儲,進行分布式互動查詢的查詢引擎。
嚴格的來說,spark sql能夠替代的是hive的查詢引擎而不是hive本身,實際上即使在生產環境下spark sql也是針對hive資料倉儲中的資料進行查詢,spark本身自己是不提供儲存的,自然也不可能替代hive作為資料倉儲的這個功能。
spark sql的乙個優點,相較於hive查詢引擎來說,就是速度快。同樣的sql語句,可能使用hive的查詢引擎,由於其底層基於mapreduce,必須經過shuffle過程走磁碟,因此速度是非常緩慢的。很多複雜的sql語句,在hive中執行都需要乙個小時以上的時間。而spark sql由於其底層基於spark自身的基於記憶體的特點,因此速度達到了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支援可以直接針對hdfs檔案執行sql語句!
spark streaming與storm都可以用於進行實時流計算。但是他們兩者的區別是非常大的。其中區別之一,就是spark streaming和storm的計算模型完全不一樣,spark streaming是基於rdd的,因此需要將一小段時間內的,比如1秒內的資料,收集起來,作為乙個rdd,然後再針對這個batch的資料進行處理。而storm卻可以做到每來一條資料,都可以立即進行處理和計算。因此,spark streaming實際上嚴格意義上來說,只能稱作準實時的流計算框架;而storm是真正意義上的實時計算框架。
此外,storm支援的一項高階特性,是spark streaming暫時不具備的,即storm支援在分布式流式計算程式(topology)在執行過程中,可以動態地調整並行度,從而動態提高併發處理能力。而spark streaming是無法動態調整並行度的。
但是spark streaming也有其優點,首先spark streaming由於是基於batch進行處理的,因此相較於storm基於單條資料進行處理,具有數倍甚至數十倍的吞吐量。
此外,spark streaming由於也身處於spark生態圈內,因此spark streaming可以與spark core、spark sql,甚至是spark mllib、spark graphx進行無縫整合。流式處理完的資料,可以立即進行各種map、reduce轉換操作,可以立即使用sql進行查詢,甚至可以立即使用machine learning或者圖計算演算法進行處理。這種一站式的大資料處理功能和優勢,是storm無法匹敵的。
因此,綜合上述來看,通常在對實時性要求特別高,而且實時資料量不穩定,比如在白天有高峰期的情況下,可以選擇使用storm。但是如果是對實時性要求一般,允許1秒的準實時處理,而且不要求動態調整並行度的話,選擇spark streaming是更好的選擇。
對以前的知識回顧,加深基礎知識!
學習來自:中華石杉老師——spark從入門到精通278講
每天進步一點點,也許某一天你也會變得那麼渺小!!!
初探 第一章 DirectX 的前世今身
directx 的組成部分 directx是乙個 庫集合,提供給遊戲和多 應用乙個公共的函數集合。為了確保你的遊戲只需要使用必須的函式,directx被劃分為多個元件。directx sdk提供了大量的資訊用於怎樣使用遊戲管理器來管理你自己的遊戲,當遊戲安裝時特別有用。direct3d 11 的階段...
總結《Spark技術內幕》第一章 Spark簡介
目錄 spark是大資料分析引擎,集批處理,實時流計算處理分布式資料集。spark實現了一種分布式的記憶體抽象,稱為彈性分布式資料集 resilient distributed dataset,rdd 它支援基於工作集的應用,同時具有資料流模型的特點 自動容錯 位置感知性排程和可伸縮性。rdd允許使...
python第一章筆記 第一章 基礎
參與除法的兩個數中有乙個數為浮點數,結果也為浮點數 如 1.0 2,1 2.0,1.0 2.0 python print 1.0 2 結果 0.5 print 1 2.0 結果 0.5 print 1.0 2.0 結果 0.5 整數 整數,計算結果的小數部分被截除,只保留整數部分 不會四捨五入 如 ...