什么是Spark,如何使用Spark進(jìn)行數(shù)據(jù)分析
1、Apache spark是一個(gè)為速度和通用目標(biāo)設(shè)計(jì)的集群計(jì)算平臺(tái)。

從速度的角度看,Spark從流行的MapReduce模型繼承而來(lái),可以更有效地支持多種類(lèi)型的計(jì)算,如交互式查詢(xún)和流處理。速度在大數(shù)據(jù)集的處理中非常重要,它可以決定用戶(hù)可以交互式地處理數(shù)據(jù),還是等幾分鐘甚至幾小時(shí)。Spark為速度提供的一個(gè)重要特性是其可以在內(nèi)存中運(yùn)行計(jì)算,即使對(duì)基于磁盤(pán)的復(fù)雜應(yīng)用,Spark依然比MapReduce更有效。
從通用性來(lái)說(shuō),Spark可以處理之前需要多個(gè)獨(dú)立的分布式系統(tǒng)來(lái)處理的任務(wù),這些任務(wù)包括批處理應(yīng)用、交互式算法、交互式查詢(xún)和數(shù)據(jù)流。通過(guò)用同一個(gè)引擎支持這些任務(wù),Spark使得合并不同的處理類(lèi)型變得簡(jiǎn)單,而合并操作在生產(chǎn)數(shù)據(jù)分析中頻繁使用。而且,Spark降低了維護(hù)不同工具的管理負(fù)擔(dān)。
Spark被設(shè)計(jì)的高度易訪問(wèn),用Python、Java、Scala和SQL提供簡(jiǎn)單的API,而且提供豐富的內(nèi)建庫(kù)。Spark也與其他大數(shù)據(jù)工具進(jìn)行了集成。特別地,Spark可以運(yùn)行在Hadoop的集群上,可以訪問(wèn)任何Hadoop的數(shù)據(jù)源,包括Cassandra。
2、基本原理
Spark streaming: 構(gòu)建在Spark上處理Stream數(shù)據(jù)的框架,基本的原理是將Stream數(shù)據(jù)分成小的時(shí)間片斷(幾秒),以類(lèi)似batch批量處理的方式來(lái)處理這小部分?jǐn)?shù)據(jù)。Spark streaming構(gòu)建在Spark上,一方面是因?yàn)镾park的低延遲執(zhí)行引擎(100ms+),雖然比不上專(zhuān)門(mén)的流式數(shù)據(jù)處理軟件,也可以用于實(shí)時(shí)計(jì)算,另一方面相比基于Record的其它處理框架(如Storm),一部分窄依賴(lài)的RDD數(shù)據(jù)集可以從源數(shù)據(jù)重新計(jì)算達(dá)到容錯(cuò)處理目的。此外小批量處理的方式使得它可以同時(shí)兼容批量和實(shí)時(shí)數(shù)據(jù)處理的邏輯和算法。方便了一些需要?dú)v史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)聯(lián)合分析的特定應(yīng)用場(chǎng)合。其架構(gòu)如下圖所示:

3、Spark特點(diǎn)概括為“輕、靈、巧和快”。
輕:Spark 0.6核心代碼有2萬(wàn)行,Hadoop 1.0為9萬(wàn)行,2.0為22萬(wàn)行。一方面,感謝Scala語(yǔ)言的簡(jiǎn)潔和豐富表達(dá)力;另一方面,Spark很好地利用了Hadoop和Mesos(伯克利 另一個(gè)進(jìn)入孵化器的項(xiàng)目,主攻集群的動(dòng)態(tài)資源管理)的基礎(chǔ)設(shè)施。雖然很輕,但在容錯(cuò)設(shè)計(jì)上不打折扣。
靈:Spark 提供了不同層面的靈活性。在實(shí)現(xiàn)層,它完美演繹了Scala trait動(dòng)態(tài)混入(mixin)策略(如可更換的集群調(diào)度器、序列化庫(kù));在原語(yǔ)(Primitive)層,它允許擴(kuò)展新的數(shù)據(jù)算子 (operator)、新的數(shù)據(jù)源(如HDFS之外支持DynamoDB)、新的language bindings(Java和Python);在范式(Paradigm)層,Spark支持內(nèi)存計(jì)算、多迭代批量處理、即席查詢(xún)、流處理和圖計(jì)算等多種 范式。
巧: 巧在借勢(shì)和借力。Spark借Hadoop之勢(shì),與Hadoop無(wú)縫結(jié)合;接著Shark(Spark上的數(shù)據(jù)倉(cāng)庫(kù)實(shí)現(xiàn))借了Hive的勢(shì);圖計(jì)算借 用Pregel和PowerGraph的API以及PowerGraph的點(diǎn)分割思想。一切的一切,都借助了Scala(被廣泛譽(yù)為Java的未來(lái)取代 者)之勢(shì):Spark編程的Look'n'Feel就是原汁原味的Scala,無(wú)論是語(yǔ)法還是API。在實(shí)現(xiàn)上,又能靈巧借力。為支持交互式編 程,Spark只需對(duì)Scala的Shell小做修改(相比之下,微軟為支持JavaScript Console對(duì)MapReduce交互式編程,不僅要跨越Java和JavaScript的思維屏障,在實(shí)現(xiàn)上還要大動(dòng)干戈)。
快:Spark 對(duì)小數(shù)據(jù)集能達(dá)到亞秒級(jí)的延遲,這對(duì)于Hadoop MapReduce是無(wú)法想象的(由于“心跳”間隔機(jī)制,僅任務(wù)啟動(dòng)就有數(shù)秒的延遲)。就大數(shù)據(jù)集而言,對(duì)典型的迭代機(jī)器 學(xué)習(xí)、即席查詢(xún)(ad-hoc query)、圖計(jì)算等應(yīng)用,Spark版本比基于MapReduce、Hive和Pregel的實(shí)現(xiàn)快上十倍到百倍。其中內(nèi)存計(jì)算、數(shù)據(jù)本地性 (locality)和傳輸優(yōu)化、調(diào)度優(yōu)化等該居首功,也與設(shè)計(jì)伊始即秉持的輕量理念不無(wú)關(guān)系。

4、Spark的核心組件
Spark核心組件包含Spark的基本功能,有任務(wù)調(diào)度組件、內(nèi)存管理組件、容錯(cuò)恢復(fù)組件、與存儲(chǔ)系統(tǒng)交互的組件等。Spark核心組件提供了定義彈性分布式數(shù)據(jù)集(resilient distributed datasets,RDDs)的API,這組API是Spark主要的編程抽象。RDDs表示分布在多個(gè)不同機(jī)器節(jié)點(diǎn)上,可以被并行處理的數(shù)據(jù)集合。Spark核心組件提供許多API來(lái)創(chuàng)建和操作這些集合。
Spark SQL
Spark SQL是Spark用來(lái)處理結(jié)構(gòu)化數(shù)據(jù)的包。它使得可以像Hive查詢(xún)語(yǔ)言(Hive Query Language, HQL)一樣通過(guò)SQL語(yǔ)句來(lái)查詢(xún)數(shù)據(jù),支持多種數(shù)據(jù)源,包括Hive表、Parquet和JSON。除了為Spark提供一個(gè)SQL接口外,Spark SQL允許開(kāi)發(fā)人員將SQL查詢(xún)和由RDDs通過(guò)Python、Java和Scala支持的數(shù)據(jù)編程操作混合進(jìn)一個(gè)單一的應(yīng)用中,進(jìn)而將SQL與復(fù)雜的分析結(jié)合。與計(jì)算密集型環(huán)境緊密集成使得Spark SQL不同于任何其他開(kāi)源的數(shù)據(jù)倉(cāng)庫(kù)工具。Spark SQL在Spark 1.0版本中引入Spark。
Shark是一個(gè)較老的由加利福尼亞大學(xué)和伯克利大學(xué)開(kāi)發(fā)的Spark上的SQL項(xiàng)目,通過(guò)修改Hive而運(yùn)行在Spark上。現(xiàn)在已經(jīng)被Spark SQL取代,以提供與Spark引擎和API更好的集成。
Spark流(Spark Streaming)
Spark流作為Spark的一個(gè)組件,可以處理實(shí)時(shí)流數(shù)據(jù)。流數(shù)據(jù)的例子有生產(chǎn)環(huán)境的Web服務(wù)器生成的日志文件,用戶(hù)向一個(gè)Web服務(wù)請(qǐng)求包含狀態(tài)更新的消息。Spark流提供一個(gè)和Spark核心RDD API非常匹配的操作數(shù)據(jù)流的API,使得編程人員可以更容易地了解項(xiàng)目,并且可以在操作內(nèi)存數(shù)據(jù)、磁盤(pán)數(shù)據(jù)、實(shí)時(shí)數(shù)據(jù)的應(yīng)用之間快速切換。Spark流被設(shè)計(jì)為和Spark核心組件提供相同級(jí)別的容錯(cuò)性,吞吐量和可伸縮性。
MLlib
Spark包含一個(gè)叫做MLlib的關(guān)于機(jī)器學(xué)習(xí)的庫(kù)。MLlib提供多種類(lèi)型的機(jī)器學(xué)習(xí)算法,包括分類(lèi)、回歸、聚類(lèi)和協(xié)同過(guò)濾,并支持模型評(píng)估和數(shù)據(jù)導(dǎo)入功能。MLlib也提供一個(gè)低層的機(jī)器學(xué)習(xí)原語(yǔ),包括一個(gè)通用的梯度下降優(yōu)化算法。所有這些方法都可以應(yīng)用到一個(gè)集群上。
GraphX
GraphX是一個(gè)操作圖(如社交網(wǎng)絡(luò)的好友圖)和執(zhí)行基于圖的并行計(jì)算的庫(kù)。與Spark流和Spark SQL類(lèi)似,GraphX擴(kuò)展了Spark RDD API,允許我們用和每個(gè)節(jié)點(diǎn)和邊綁定的任意屬性來(lái)創(chuàng)建一個(gè)有向圖。GraphX也提供了各種各樣的操作圖的操作符,以及關(guān)于通用圖算法的一個(gè)庫(kù)。
集群管理器Cluster Managers
在底層,Spark可以有效地從一個(gè)計(jì)算節(jié)點(diǎn)擴(kuò)展到成百上千個(gè)節(jié)點(diǎn)。為了在最大化靈活性的同時(shí)達(dá)到這個(gè)目標(biāo),Spark可以運(yùn)行在多個(gè)集群管理器上,包括Hadoop YARN,Apache Mesos和一個(gè)包含在Spark中的叫做獨(dú)立調(diào)度器的簡(jiǎn)易的集群管理器。如果你在一個(gè)空的機(jī)器群上安裝Spark,獨(dú)立調(diào)度器提供一個(gè)簡(jiǎn)單的方式;如果你已經(jīng)有一個(gè)Hadoop YARN或Mesos集群,Spark支持你的應(yīng)用允許在這些集群管理器上。第七章給出了不同的選擇,以及如何選擇正確的集群管理器。

5、Spark的生態(tài)系統(tǒng)
Shark ( Hive on Spark): Shark基本上就是在Spark的框架基礎(chǔ)上提供和Hive一樣的H iveQL命令接口,為了最大程度的保持和Hive的兼容性,Shark使用了Hive的API來(lái)實(shí)現(xiàn)query Parsing和 Logic Plan generation,最后的PhysicalPlan execution階段用Spark代替Hadoop MapReduce。通過(guò)配置Shark參數(shù),Shark可以自動(dòng)在內(nèi)存中緩存特定的RDD,實(shí)現(xiàn)數(shù)據(jù)重用,進(jìn)而加快特定數(shù)據(jù)集的檢索。同時(shí),Shark通過(guò)UDF用戶(hù)自定義函數(shù)實(shí)現(xiàn)特定的數(shù)據(jù)分析學(xué)習(xí)算法,使得SQL數(shù)據(jù)查詢(xún)和運(yùn)算分析能結(jié)合在一起,最大化RDD的重復(fù)使用。
Spark streaming: 構(gòu)建在Spark上處理Stream數(shù)據(jù)的框架,基本的原理是將Stream數(shù)據(jù)分成小的時(shí)間片斷(幾秒),以類(lèi)似batch批量處理的方式來(lái)處理這小部分?jǐn)?shù)據(jù)。Spark Streaming構(gòu)建在Spark上,一方面是因為Spark的低延遲執(zhí)行引擎(100ms+)可以用于實(shí)時(shí)計(jì)算,另一方面相比基于Record的其它處理框架(如Storm),RDD數(shù)據(jù)集更容易做高效的容錯(cuò)處理。此外小批量處理的方式使得它可以同時(shí)兼容批量和實(shí)時(shí)數(shù)據(jù)處理的邏輯和算法。方便了一些需要?dú)v史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)聯(lián)合分析的特定應(yīng)用場(chǎng)合。
Bagel: Pregel on Spark,可以用Spark進(jìn)行圖計(jì)算,這是個(gè)非常有用的小項(xiàng)目。Bagel自帶了一個(gè)例子,實(shí)現(xiàn)了Google的PageRank算法。

6、Spark歷史簡(jiǎn)介
Spark是一個(gè)開(kāi)源項(xiàng)目,由多個(gè)不同的開(kāi)發(fā)者社區(qū)進(jìn)行維護(hù)。如果你或你的團(tuán)隊(duì)第一次使用Spark,你可能對(duì)它的歷史感興趣。Spark由UC伯克利RAD實(shí)驗(yàn)室(現(xiàn)在是AMP實(shí)驗(yàn)室)在2009年作為一個(gè)研究項(xiàng)目創(chuàng)建。實(shí)驗(yàn)室的研究人員之前基于Hadoop MapReduce工作,他們發(fā)現(xiàn)MapReduce對(duì)于迭代和交互式計(jì)算任務(wù)效率不高。因此,在開(kāi)始階段,Spark主要為交互式查詢(xún)和迭代算法設(shè)計(jì),支持內(nèi)存存儲(chǔ)和高效的容錯(cuò)恢復(fù)。
在2009年Spark創(chuàng)建不久后,就有關(guān)于Spark的學(xué)術(shù)性文章發(fā)表,在一些特定任務(wù)中,Spark的速度可以達(dá)到MapReduce的10-20倍。
一部分Spark的用戶(hù)是UC伯克利的其他組,包括機(jī)器學(xué)習(xí)的研究人員,如Mobile Millennium項(xiàng)目組,該組用Spark來(lái)監(jiān)控和預(yù)測(cè)舊金山灣區(qū)的交通擁堵情況。在一個(gè)非常短的時(shí)間內(nèi),許多外部的機(jī)構(gòu)開(kāi)始使用Spark,現(xiàn)在,已經(jīng)有超過(guò)50個(gè)機(jī)構(gòu)在使用Spark,還有一些機(jī)構(gòu)公布了他們?cè)赟park Meetups和Spark Summit等Spark社區(qū)的使用情況。Spark主要的貢獻(xiàn)者有Databricks,雅虎和因特爾。
在2011年,AMP實(shí)驗(yàn)室開(kāi)始開(kāi)發(fā)Spark上的上層組件,如Shark和Spark流。所有這些組件有時(shí)被稱(chēng)為伯克利數(shù)據(jù)分析棧(Berkeley Data Analytics Stack,BDAS)。
Spark在2010年3月開(kāi)源,在2014年6月移入Apache軟件基金會(huì),現(xiàn)在是其頂級(jí)項(xiàng)目。
參考資料:
1、
2、
3、
關(guān)于更多大數(shù)據(jù)相關(guān)資訊>>>
慧都年終盛典火爆開(kāi)啟,一年僅一次的最強(qiáng)促銷(xiāo),破冰鉅惠不容錯(cuò)過(guò)!!優(yōu)惠詳情點(diǎn)擊查看>>