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