什么是Spark,如何使用Spark進行數(shù)據(jù)分析
1、Apache spark是一個為速度和通用目標設(shè)計的集群計算平臺。
從速度的角度看,Spark從流行的MapReduce模型繼承而來,可以更有效地支持多種類型的計算,如交互式查詢和流處理。速度在大數(shù)據(jù)集的處理中非常重要,它可以決定用戶可以交互式地處理數(shù)據(jù),還是等幾分鐘甚至幾小時。Spark為速度提供的一個重要特性是其可以在內(nèi)存中運行計算,即使對基于磁盤的復雜應用,Spark依然比MapReduce更有效。
從通用性來說,Spark可以處理之前需要多個獨立的分布式系統(tǒng)來處理的任務,這些任務包括批處理應用、交互式算法、交互式查詢和數(shù)據(jù)流。通過用同一個引擎支持這些任務,Spark使得合并不同的處理類型變得簡單,而合并操作在生產(chǎn)數(shù)據(jù)分析中頻繁使用。而且,Spark降低了維護不同工具的管理負擔。
Spark被設(shè)計的高度易訪問,用Python、Java、Scala和SQL提供簡單的API,而且提供豐富的內(nèi)建庫。Spark也與其他大數(shù)據(jù)工具進行了集成。特別地,Spark可以運行在Hadoop的集群上,可以訪問任何Hadoop的數(shù)據(jù)源,包括Cassandra。
2、基本原理
Spark streaming: 構(gòu)建在Spark上處理Stream數(shù)據(jù)的框架,基本的原理是將Stream數(shù)據(jù)分成小的時間片斷(幾秒),以類似batch批量處理的方式來處理這小部分數(shù)據(jù)。Spark streaming構(gòu)建在Spark上,一方面是因為Spark的低延遲執(zhí)行引擎(100ms+),雖然比不上專門的流式數(shù)據(jù)處理軟件,也可以用于實時計算,另一方面相比基于Record的其它處理框架(如Storm),一部分窄依賴的RDD數(shù)據(jù)集可以從源數(shù)據(jù)重新計算達到容錯處理目的。此外小批量處理的方式使得它可以同時兼容批量和實時數(shù)據(jù)處理的邏輯和算法。方便了一些需要歷史數(shù)據(jù)和實時數(shù)據(jù)聯(lián)合分析的特定應用場合。其架構(gòu)如下圖所示:
3、Spark特點概括為“輕、靈、巧和快”。
輕:Spark 0.6核心代碼有2萬行,Hadoop 1.0為9萬行,2.0為22萬行。一方面,感謝Scala語言的簡潔和豐富表達力;另一方面,Spark很好地利用了Hadoop和Mesos(伯克利 另一個進入孵化器的項目,主攻集群的動態(tài)資源管理)的基礎(chǔ)設(shè)施。雖然很輕,但在容錯設(shè)計上不打折扣。
靈:Spark 提供了不同層面的靈活性。在實現(xiàn)層,它完美演繹了Scala trait動態(tài)混入(mixin)策略(如可更換的集群調(diào)度器、序列化庫);在原語(Primitive)層,它允許擴展新的數(shù)據(jù)算子 (operator)、新的數(shù)據(jù)源(如HDFS之外支持DynamoDB)、新的language bindings(Java和Python);在范式(Paradigm)層,Spark支持內(nèi)存計算、多迭代批量處理、即席查詢、流處理和圖計算等多種 范式。
巧: 巧在借勢和借力。Spark借Hadoop之勢,與Hadoop無縫結(jié)合;接著Shark(Spark上的數(shù)據(jù)倉庫實現(xiàn))借了Hive的勢;圖計算借 用Pregel和PowerGraph的API以及PowerGraph的點分割思想。一切的一切,都借助了Scala(被廣泛譽為Java的未來取代 者)之勢:Spark編程的Look'n'Feel就是原汁原味的Scala,無論是語法還是API。在實現(xiàn)上,又能靈巧借力。為支持交互式編 程,Spark只需對Scala的Shell小做修改(相比之下,微軟為支持JavaScript Console對MapReduce交互式編程,不僅要跨越Java和JavaScript的思維屏障,在實現(xiàn)上還要大動干戈)。
快:Spark 對小數(shù)據(jù)集能達到亞秒級的延遲,這對于Hadoop MapReduce是無法想象的(由于“心跳”間隔機制,僅任務啟動就有數(shù)秒的延遲)。就大數(shù)據(jù)集而言,對典型的迭代機器 學習、即席查詢(ad-hoc query)、圖計算等應用,Spark版本比基于MapReduce、Hive和Pregel的實現(xiàn)快上十倍到百倍。其中內(nèi)存計算、數(shù)據(jù)本地性 (locality)和傳輸優(yōu)化、調(diào)度優(yōu)化等該居首功,也與設(shè)計伊始即秉持的輕量理念不無關(guān)系。
4、Spark的核心組件
Spark核心組件包含Spark的基本功能,有任務調(diào)度組件、內(nèi)存管理組件、容錯恢復組件、與存儲系統(tǒng)交互的組件等。Spark核心組件提供了定義彈性分布式數(shù)據(jù)集(resilient distributed datasets,RDDs)的API,這組API是Spark主要的編程抽象。RDDs表示分布在多個不同機器節(jié)點上,可以被并行處理的數(shù)據(jù)集合。Spark核心組件提供許多API來創(chuàng)建和操作這些集合。
Spark SQL
Spark SQL是Spark用來處理結(jié)構(gòu)化數(shù)據(jù)的包。它使得可以像Hive查詢語言(Hive Query Language, HQL)一樣通過SQL語句來查詢數(shù)據(jù),支持多種數(shù)據(jù)源,包括Hive表、Parquet和JSON。除了為Spark提供一個SQL接口外,Spark SQL允許開發(fā)人員將SQL查詢和由RDDs通過Python、Java和Scala支持的數(shù)據(jù)編程操作混合進一個單一的應用中,進而將SQL與復雜的分析結(jié)合。與計算密集型環(huán)境緊密集成使得Spark SQL不同于任何其他開源的數(shù)據(jù)倉庫工具。Spark SQL在Spark 1.0版本中引入Spark。
Shark是一個較老的由加利福尼亞大學和伯克利大學開發(fā)的Spark上的SQL項目,通過修改Hive而運行在Spark上?,F(xiàn)在已經(jīng)被Spark SQL取代,以提供與Spark引擎和API更好的集成。
Spark流(Spark Streaming)
Spark流作為Spark的一個組件,可以處理實時流數(shù)據(jù)。流數(shù)據(jù)的例子有生產(chǎn)環(huán)境的Web服務器生成的日志文件,用戶向一個Web服務請求包含狀態(tài)更新的消息。Spark流提供一個和Spark核心RDD API非常匹配的操作數(shù)據(jù)流的API,使得編程人員可以更容易地了解項目,并且可以在操作內(nèi)存數(shù)據(jù)、磁盤數(shù)據(jù)、實時數(shù)據(jù)的應用之間快速切換。Spark流被設(shè)計為和Spark核心組件提供相同級別的容錯性,吞吐量和可伸縮性。
MLlib
Spark包含一個叫做MLlib的關(guān)于機器學習的庫。MLlib提供多種類型的機器學習算法,包括分類、回歸、聚類和協(xié)同過濾,并支持模型評估和數(shù)據(jù)導入功能。MLlib也提供一個低層的機器學習原語,包括一個通用的梯度下降優(yōu)化算法。所有這些方法都可以應用到一個集群上。
GraphX
GraphX是一個操作圖(如社交網(wǎng)絡的好友圖)和執(zhí)行基于圖的并行計算的庫。與Spark流和Spark SQL類似,GraphX擴展了Spark RDD API,允許我們用和每個節(jié)點和邊綁定的任意屬性來創(chuàng)建一個有向圖。GraphX也提供了各種各樣的操作圖的操作符,以及關(guān)于通用圖算法的一個庫。
集群管理器Cluster Managers
在底層,Spark可以有效地從一個計算節(jié)點擴展到成百上千個節(jié)點。為了在最大化靈活性的同時達到這個目標,Spark可以運行在多個集群管理器上,包括Hadoop YARN,Apache Mesos和一個包含在Spark中的叫做獨立調(diào)度器的簡易的集群管理器。如果你在一個空的機器群上安裝Spark,獨立調(diào)度器提供一個簡單的方式;如果你已經(jīng)有一個Hadoop YARN或Mesos集群,Spark支持你的應用允許在這些集群管理器上。第七章給出了不同的選擇,以及如何選擇正確的集群管理器。
5、Spark的生態(tài)系統(tǒng)
Shark ( Hive on Spark): Shark基本上就是在Spark的框架基礎(chǔ)上提供和Hive一樣的H iveQL命令接口,為了最大程度的保持和Hive的兼容性,Shark使用了Hive的API來實現(xiàn)query Parsing和 Logic Plan generation,最后的PhysicalPlan execution階段用Spark代替Hadoop MapReduce。通過配置Shark參數(shù),Shark可以自動在內(nèi)存中緩存特定的RDD,實現(xiàn)數(shù)據(jù)重用,進而加快特定數(shù)據(jù)集的檢索。同時,Shark通過UDF用戶自定義函數(shù)實現(xiàn)特定的數(shù)據(jù)分析學習算法,使得SQL數(shù)據(jù)查詢和運算分析能結(jié)合在一起,最大化RDD的重復使用。
Spark streaming: 構(gòu)建在Spark上處理Stream數(shù)據(jù)的框架,基本的原理是將Stream數(shù)據(jù)分成小的時間片斷(幾秒),以類似batch批量處理的方式來處理這小部分數(shù)據(jù)。Spark Streaming構(gòu)建在Spark上,一方面是因為Spark的低延遲執(zhí)行引擎(100ms+)可以用于實時計算,另一方面相比基于Record的其它處理框架(如Storm),RDD數(shù)據(jù)集更容易做高效的容錯處理。此外小批量處理的方式使得它可以同時兼容批量和實時數(shù)據(jù)處理的邏輯和算法。方便了一些需要歷史數(shù)據(jù)和實時數(shù)據(jù)聯(lián)合分析的特定應用場合。
Bagel: Pregel on Spark,可以用Spark進行圖計算,這是個非常有用的小項目。Bagel自帶了一個例子,實現(xiàn)了Google的PageRank算法。
6、Spark歷史簡介
Spark是一個開源項目,由多個不同的開發(fā)者社區(qū)進行維護。如果你或你的團隊第一次使用Spark,你可能對它的歷史感興趣。Spark由UC伯克利RAD實驗室(現(xiàn)在是AMP實驗室)在2009年作為一個研究項目創(chuàng)建。實驗室的研究人員之前基于Hadoop MapReduce工作,他們發(fā)現(xiàn)MapReduce對于迭代和交互式計算任務效率不高。因此,在開始階段,Spark主要為交互式查詢和迭代算法設(shè)計,支持內(nèi)存存儲和高效的容錯恢復。
在2009年Spark創(chuàng)建不久后,就有關(guān)于Spark的學術(shù)性文章發(fā)表,在一些特定任務中,Spark的速度可以達到MapReduce的10-20倍。
一部分Spark的用戶是UC伯克利的其他組,包括機器學習的研究人員,如Mobile Millennium項目組,該組用Spark來監(jiān)控和預測舊金山灣區(qū)的交通擁堵情況。在一個非常短的時間內(nèi),許多外部的機構(gòu)開始使用Spark,現(xiàn)在,已經(jīng)有超過50個機構(gòu)在使用Spark,還有一些機構(gòu)公布了他們在Spark Meetups和Spark Summit等Spark社區(qū)的使用情況。Spark主要的貢獻者有Databricks,雅虎和因特爾。
在2011年,AMP實驗室開始開發(fā)Spark上的上層組件,如Shark和Spark流。所有這些組件有時被稱為伯克利數(shù)據(jù)分析棧(Berkeley Data Analytics Stack,BDAS)。
Spark在2010年3月開源,在2014年6月移入Apache軟件基金會,現(xiàn)在是其頂級項目。
參考資料:
1、百度百科
關(guān)于更多大數(shù)據(jù)相關(guān)資訊>>>
慧都年終盛典火爆開啟,一年僅一次的最強促銷,破冰鉅惠不容錯過??!優(yōu)惠詳情點擊查看>>