Spark是伯克利大學(xué)2009年開(kāi)始研發(fā)的一個(gè)項目,于2010年開(kāi)源。自從2013年Spark進(jìn)入Apache的孵化器項目后,發(fā)生了翻天覆地的變化。2014年初,Spark成為了Apache排名第三的頂級項目,其發(fā)展勢頭更加迅猛。Spark通常一個(gè)多月就會(huì )發(fā)布一個(gè)小版本,兩三個(gè)月左右會(huì )發(fā)布一個(gè)大版本,目前最新版本為1.5.2。2014年,Hadoop的四大商業(yè)機構均宣稱(chēng)全力支持Spark,今后將全面接收基于Spark編寫(xiě)的數據挖掘與分析算法,多家世界頂級的數據企業(yè)例如Google,Facebook等現已紛紛轉向Spark框架。目前參與貢獻的公司也超過(guò)50家;代碼庫也由原來(lái)的63000行增加到175000行。圖1為截止到2014年的Spark代碼貢獻者每個(gè)月的增長(cháng)曲線(xiàn)。僅2014年,在世界各地召開(kāi)了多次以Spark為主題的峰會(huì )。這些足以說(shuō)明Spark的前沿性與火爆的發(fā)展勢頭。
近兩年,Spark在中國的發(fā)展達到了一個(gè)前所未有的狀態(tài)和高度。其中阿里巴巴的搜索和廣告業(yè)務(wù),最初使用Mahout和MapReduce來(lái)解決復雜的機器學(xué)習問(wèn)題,但是在效率和代碼維護方面并不理想,現已轉向Spark框架。淘寶技術(shù)團隊使用Spark實(shí)現了多次迭代的機器學(xué)習算法和一些高計算復雜度的算法,并將其運用在推薦系統上;同時(shí)還利用Spark中的一系列組件解決了基于最大連通圖的社區發(fā)現、基于三角形計數的關(guān)系衡量、基于隨機游走的用戶(hù)屬性傳播等許多生產(chǎn)問(wèn)題。此外,騰訊也是最早使用Spark的應用之一。借助Spark快速迭代的優(yōu)勢,騰訊提出了大數據精準推薦,并采用“數據 算法 系統”這套技術(shù)方案支持每天上百億的請求量。
特性一:快速
相同的實(shí)驗環(huán)境與數據下,在內存中運行相同的程序,Spark比MapReduce快約100倍;在磁盤(pán)中運行相同的程序,Spark要MapReduce快約10倍。例如圖2所示,Spark和MapReduce進(jìn)行邏輯回歸運算后的實(shí)驗數據。
針對于非??简炏到y性能的排序問(wèn)題,圖3是Spark與MapReduce對100TB數據樣本排序的實(shí)驗結果:MapReduce用了2100臺機器,花費72分鐘;而Spark僅用207臺機器,不到前者的1/10,花費23分鐘,接近前者的1/3。
此外,眾多實(shí)驗表明,在處理迭代式應用上Spark比MapReduce快20多倍;計算數據分析類(lèi)報表的性能提高了40多倍;Spark能夠在5-7秒的延時(shí)內交互式掃描1TB數據集。
Spark運行速度如此之快,主要得益于以下兩方面:一方面,Spark中的運算大多是基于內存的。Spark提出了一種分布式的內存抽象,稱(chēng)為彈性分布式數據集(RDD,Resilient Distributed Datasets)。RDD支持基于工作集的應用,同時(shí)具有數據流模型的特點(diǎn):自動(dòng)容錯、位置感知調度和可伸縮性。RDD允許用戶(hù)在執行多個(gè)查詢(xún)時(shí)顯式地將工作集緩存在內存中,后續的查詢(xún)能夠重用工作集,這極大地提升了查詢(xún)速度。另一方面,Spark從穩定的物理存儲(如分布式文件系統)中加載記錄,記錄被傳入由一組確定性操作構成的DAG,然后寫(xiě)回穩定存儲。DAG數據流圖能夠在運行時(shí)自動(dòng)實(shí)現任務(wù)調度和故障恢復。盡管非循環(huán)數據流是一種很強大的抽象方法,但仍然有些應用無(wú)法使用這種方式描述。Spark能夠在多個(gè)并行操作之間重用工作數據集,適用于非循環(huán)數據流模型難以處理的應用。
特性二:易用
Spark編程非常高效、簡(jiǎn)潔,支持多種語(yǔ)言的API,如Java, Scala, Python等,而且代碼非常簡(jiǎn)潔。例如在基于MapReduce開(kāi)發(fā)的WordCount示例程序中,用戶(hù)需要重寫(xiě)Map類(lèi)和Reduce類(lèi),雖然MapReduce類(lèi)似八股文的程序編寫(xiě)模式極大地簡(jiǎn)化了并行程序開(kāi)發(fā)過(guò)程,但是程序代碼至少幾十行。若基于Spark開(kāi)發(fā)同樣的WordCount程序,僅需下面短短的幾行代碼,例如下面程序是對存儲在HDFS上的wc.input中的單詞個(gè)數進(jìn)行統計:
sc.textFile('hdfs://master:8020/user/dong/spark/wc.input').flatMap(_.split('')).map((_,1)).reduceByKey(_ _).collect
由此可見(jiàn),Spark編程非常簡(jiǎn)潔。這主要是因為Spark是基于Scala開(kāi)發(fā),其對數據處理提供了豐富的操作,極大地提高了用戶(hù)的程序開(kāi)發(fā)效率。
目前基于Spark的實(shí)際項目開(kāi)發(fā)中約70%采用Scala語(yǔ)言,這是因為Spark本身就是基于Scala開(kāi)發(fā)的;其次是JAVA,約占20%;此外還有Python等。
特性三:通用
相對與第一代的大數據生態(tài)系統Hadoop中的MapReduce,Spark 無(wú)論是在性能還是在方案的統一性方面,都有著(zhù)極大的優(yōu)越性,雖然MapReduce在此方面也在做積極的努力,但Spark的優(yōu)勢還是明顯的。Spark框架通常涉及到五個(gè)最核心的組件。如圖4所示,位于下面的Apache Spark又稱(chēng)為Spark Core。在Spark Core的基礎上,針對一些特殊的需求,Spark開(kāi)發(fā)了一系列組件:Spark SQL(在Spark上建立是SQL,類(lèi)似于Hive);Spark Streaming(實(shí)時(shí)流處理系統);MLlib(用戶(hù)友好的機器學(xué)習庫);GraphX(圖處理組件),此外還有一個(gè)BlinkDB(基于海量數據的交互式查詢(xún)引擎,能夠在設定的誤差范圍內或響應時(shí)間內進(jìn)行SQL查詢(xún))。將這些組件放在一起,就構成了一個(gè)Spark的軟件棧?;谶@個(gè)軟件棧Spark提出并實(shí)現了一種理念“one stack to rule them all”,即Spark可以對大數據進(jìn)行綜合處理:實(shí)時(shí)數據流處理、批處理和交互式查詢(xún)。這一軟件棧就體現了Spark的通用性。

圖5. Spark對大數據的綜合處理示意圖
特性四:多種運行模式
在運行方面,Spark的運行無(wú)處不在。Spark既可以運行本地local模式,也可以以Standalone、cluster等多種模式運行在Yarn、Mesos上,還可以運行在云端例如EC2。此外,Spark的數據來(lái)源非常廣泛,可以處理來(lái)自HDFS、HBase、 Hive、Cassandra、Tachyon上的各種類(lèi)型的數據。
Spark這套速度極快的內存分析引擎與以往的大數據處理框架相比具有諸多優(yōu)勢,從而能夠輕松地為大數據應用企業(yè)帶來(lái)理想的投資回報。Spark項目將一系列創(chuàng )新型思維帶入了大數據處理市場(chǎng),并且表現出極為強勁的發(fā)展勢頭。近年來(lái),人大經(jīng)濟論壇大數據分析團隊針對Spark框架開(kāi)展了廣泛深入的研究,并融入到大數據分析師的培訓課程中,使得整個(gè)課程體系變得更加完善,我們相信,隨著(zhù)整個(gè)團隊的不斷努力,CDA大數據分析師培訓項目將日臻完美。
工資要加劇——就學(xué)大數據
CDA大數據分析師大放干貨,8天周末班和三個(gè)月脫產(chǎn)班可以任性選擇
聯(lián)系客服