天天看點

深入了解Spark:核心思想與源碼分析. 2.2 Spark基礎知識

<b>2.2 spark基礎知識</b>

1.版本變遷

經過4年多的發展,spark目前的版本是1.4.1。我們簡單看看它的版本發展過程。

1)spark誕生于ucberkeley的amp實驗室(2009)。

2)spark正式對外開源(2010年)。

3)spark 0.6.0版本釋出(2012-10-15),進行了大範圍的性能改進,增加了一些新特性,并對standalone部署模式進行了簡化。

4)spark 0.6.2版本釋出(2013-02-07),解決了一些bug,并增強了系統的可用性。

5)spark 0.7.0版本釋出(2013-02-27),增加了更多關鍵特性,例如,python api、spark streaming的alpha版本等。

6)spark 0.7.2版本釋出(2013-06-02),性能改進并解決了一些bug,新增api使用的例子。

7)spark接受進入apache孵化器(2013-06-21)。

8)spark 0.7.3版本釋出(2013-07-16),解決一些bug,更新spark

streaming api等。

9)spark 0.8.0版本釋出(2013-09-25),一些新功能及可用性改進。

10)spark 0.8.1版本釋出(2013-12-19),支援scala 2.9、yarn 2.2、standalone部署模式下排程的高可用性、shuffle的優化等。

11)spark 0.9.0版本釋出(2014-02-02),增加了graphx,機器學習新特性,流式計算新特性,核心引擎優化(外部聚合、加強對yarn的支援)等。

12)spark 0.9.1版本釋出(2014-04-09),增強使用yarn的穩定性,改進scala和python api的奇偶性。

13)spark 1.0.0版本釋出(2014-05-30),spark sql、mllib、graphx和spark

streaming都增加了新特性并進行了優化。spark核心引擎還增加了對安全yarn叢集的支援。

14)spark 1.0.1版本釋出(2014-07-11),增加了spark

sql的新特性和對json資料的支援等。

15)spark 1.0.2版本釋出(2014-08-05),spark核心api及streaming、python、mllib的bug修複。

16)spark 1.1.0版本釋出(2014-09-11)。

17)spark 1.1.1版本釋出(2014-11-26),spark核心api及streaming、python、sql、graphx和mllib的bug修複。

18)spark 1.2.0版本釋出(2014-12-18)。

19)spark 1.2.1版本釋出(2015-02-09),spark核心api及streaming、python、sql、graphx和mllib的bug修複。

20)spark 1.3.0版本釋出(2015-03-13)。

21)spark 1.4.0版本釋出(2015-06-11)。

22)spark 1.4.1版本釋出(2015-07-15),dataframe

api及streaming、python、sql和mllib的bug修複。

2.基本概念

要想對spark有整體性的了解,推薦讀者閱讀matei zaharia的spark論文。此處筆者先介紹spark中的一些概念:

rdd(resillient

distributed dataset):彈性分布式資料集。

task:具體執行任務。task分為shufflemaptask和resulttask兩種。shufflemaptask和resulttask分别類似于hadoop中的map和reduce。

job:使用者送出的作業。一個job可能由一到多個task組成。

stage:job分成的階段。一個job可能被劃分為一到多個stage。

partition:資料分區。即一個rdd的資料可以劃分為多少個分區。

narrowdependency:窄依賴,即子rdd依賴于父rdd中固定的partition。narrow-dependency分為onetoonedependency和rangedependency兩種。

shuffledependency:shuffle依賴,也稱為寬依賴,即子rdd對父rdd中的所有partition都有依賴。

dag(directed acycle

graph):有向無環圖。用于反映各rdd之間的依賴關系。

3. scala與java的比較

spark為什麼要選擇java作為開發語言?筆者不得而知。如果能對二者進行比較,也許能看出一些端倪。表2-1列出了scala與java的比較。

表2-1 scala與java的比較

比項項     scala         java

語言類型          面向函數為主,兼有面向對象         面向對象(java8也增加了lambda函數程式設計)

簡潔性      非常簡潔     不簡潔

類型推斷          豐富的類型推斷,例如深度和鍊式的類型推斷、 duck type、隐式類型轉換等,但也是以增加了編譯時長         少量的類型推斷

可讀性      一般,豐富的文法糖導緻的各種奇幻用法,例如方法簽名         好

學習成本          較高     一般

語言特性          非常豐富的文法糖和更現代的語言特性,例如 option、模式比對、使用空格的方法調用    豐富

并發程式設計          使用actor的消息模型      使用阻塞、鎖、阻塞隊列等

通過以上比較似乎仍然無法判斷spark選擇java作為開發語言的原因。由于函數式程式設計更接近計算機思維,是以便于通過算法從大資料中模組化,這應該更符合spark作為大資料架構的理念吧!