什麼是Spark,如何使用Spark進行數據分析

一、Apache spark是一個爲速度和通用目標設計的集羣計算平臺。html

spark學習

速度的角度看,Spark從流行的MapReduce模型繼承而來,能夠更有效地支持多種類型的計算,如交互式查詢和流處理。速度在大數據集的處理中很是重要,它能夠決定用戶能夠交互式地處理數據,仍是等幾分鐘甚至幾小時。Spark爲速度提供的一個重要特性是其能夠在內存中運行計算,即便對基於磁盤的複雜應用,Spark依然比MapReduce更有效。算法

通用性來講,Spark能夠處理以前須要多個獨立的分佈式系統來處理的任務,這些任務包括批處理應用、交互式算法、交互式查詢和數據流。經過用同一個引擎支持這些任務,Spark使得合併不一樣的處理類型變得簡單,而合併操做在生產數據分析中頻繁使用。並且,Spark下降了維護不一樣工具的管理負擔。編程

Spark被設計的高度易訪問,用Python、Java、Scala和SQL提供簡單的API,並且提供豐富的內建庫。Spark也與其餘大數據工具進行了集成。特別地,Spark能夠運行在Hadoop的集羣上,能夠訪問任何Hadoop的數據源,包括Cassandra。緩存

二、基本原理

Spark streaming: 構建在Spark上處理Stream數據的框架,基本的原理是將Stream數據分紅小的時間片段(幾秒),以相似batch批量處理的方式來處理這小部分數據。Spark streaming構建在Spark上,一方面是由於Spark的低延遲執行引擎(100ms+),雖然比不上專門的流式數據處理軟件,也能夠用於實時計算,另外一方面相比基於Record的其它處理框架(如Storm),一部分窄依賴的RDD數據集能夠從源數據從新計算達到容錯處理目的。此外小批量處理的方式使得它能夠同時兼容批量和實時數據處理的邏輯和算法。方便了一些須要歷史數據和實時數據聯合分析的特定應用場合。其架構以下圖所示:服務器

spark學習

 

三、Spark特色歸納爲“輕、靈、巧和快”。

:Spark 0.6核心代碼有2萬行,Hadoop 1.0爲9萬行,2.0爲22萬行。一方面,感謝Scala語言的簡潔和豐富表達力;另外一方面,Spark很好地利用了Hadoop和Mesos(伯克利 另外一個進入孵化器的項目,主攻集羣的動態資源管理)的基礎設施。雖然很輕,但在容錯設計上不打折扣。網絡

:Spark 提供了不一樣層面的靈活性。在實現層,它完美演繹了Scala trait動態混入(mixin)策略(如可更換的集羣調度器、序列化庫);在原語(Primitive)層,它容許擴展新的數據算子 (operator)、新的數據源(如HDFS以外支持DynamoDB)、新的language bindings(Java和Python);在範式(Paradigm)層,Spark支持內存計算、多迭代批量處理、即席查詢、流處理和圖計算等多種 範式。架構

: 巧在借勢和借力。Spark借Hadoop之勢,與Hadoop無縫結合;接着Shark(Spark上的數據倉庫實現)借了Hive的勢;圖計算借 用Pregel和PowerGraph的API以及PowerGraph的點分割思想。一切的一切,都藉助了Scala(被普遍譽爲Java的將來取代 者)之勢:Spark編程的Look'n'Feel就是原汁原味的Scala,不管是語法仍是API。在實現上,又能靈巧借力。爲支持交互式編 程,Spark只需對Scala的Shell小作修改(相比之下,微軟爲支持JavaScript Console對MapReduce交互式編程,不只要跨越Java和JavaScript的思惟屏障,在實現上還要大動干戈)。框架

:Spark 對小數據集能達到亞秒級的延遲,這對於Hadoop MapReduce是沒法想象的(因爲“心跳”間隔機制,僅任務啓動就有數秒的延遲)。就大數據集而言,對典型的迭代機器 學習、即席查詢(ad-hoc query)、圖計算等應用,Spark版本比基於MapReduce、Hive和Pregel的實現快上十倍到百倍。其中內存計算、數據本地性 (locality)和傳輸優化、調度優化等該居首功,也與設計伊始即秉持的輕量理念不無關係。機器學習

spark學習

 

四、Spark的核心組件

Spark核心組件包含Spark的基本功能,有任務調度組件、內存管理組件、容錯恢復組件、與存儲系統交互的組件等。Spark核心組件提供了定義彈性分佈式數據集(resilient distributed datasets,RDDs)的API,這組API是Spark主要的編程抽象。RDDs表示分佈在多個不一樣機器節點上,能夠被並行處理的數據集合。Spark核心組件提供許多API來建立和操做這些集合。分佈式

Spark SQL

Spark SQL是Spark用來處理結構化數據的包。它使得能夠像Hive查詢語言(Hive Query Language, HQL)同樣經過SQL語句來查詢數據,支持多種數據源,包括Hive表、Parquet和JSON。除了爲Spark提供一個SQL接口外,Spark SQL容許開發人員將SQL查詢和由RDDs經過Python、Java和Scala支持的數據編程操做混合進一個單一的應用中,進而將SQL與複雜的分析結合。與計算密集型環境緊密集成使得Spark SQL不一樣於任何其餘開源的數據倉庫工具。Spark SQL在Spark 1.0版本中引入Spark。

Shark是一個較老的由加利福尼亞大學和伯克利大學開發的Spark上的SQL項目,經過修改Hive而運行在Spark上。如今已經被Spark SQL取代,以提供與Spark引擎和API更好的集成。

Spark流(Spark Streaming)

Spark流做爲Spark的一個組件,能夠處理實時流數據。流數據的例子有生產環境的Web服務器生成的日誌文件,用戶向一個Web服務請求包含狀態更新的消息。Spark流提供一個和Spark核心RDD API很是匹配的操做數據流的API,使得編程人員能夠更容易地瞭解項目,而且能夠在操做內存數據、磁盤數據、實時數據的應用之間快速切換。Spark流被設計爲和Spark核心組件提供相同級別的容錯性,吞吐量和可伸縮性。

MLlib

Spark包含一個叫作MLlib的關於機器學習的庫。MLlib提供多種類型的機器學習算法,包括分類、迴歸、聚類和協同過濾,並支持模型評估和數據導入功能。MLlib也提供一個低層的機器學習原語,包括一個通用的梯度降低優化算法。全部這些方法均可以應用到一個集羣上。

GraphX

GraphX是一個操做圖(如社交網絡的好友圖)和執行基於圖的並行計算的庫。與Spark流和Spark SQL相似,GraphX擴展了Spark RDD API,容許咱們用和每一個節點和邊綁定的任意屬性來建立一個有向圖。GraphX也提供了各類各樣的操做圖的操做符,以及關於通用圖算法的一個庫。

集羣管理器Cluster Managers

在底層,Spark能夠有效地從一個計算節點擴展到成百上千個節點。爲了在最大化靈活性的同時達到這個目標,Spark能夠運行在多個集羣管理器上,包括Hadoop YARN,Apache Mesos和一個包含在Spark中的叫作獨立調度器的簡易的集羣管理器。若是你在一個空的機器羣上安裝Spark,獨立調度器提供一個簡單的方式;若是你已經有一個Hadoop YARN或Mesos集羣,Spark支持你的應用容許在這些集羣管理器上。第七章給出了不一樣的選擇,以及如何選擇正確的集羣管理器。

spark學習

 

五、Spark的生態系統

Shark ( Hive on Spark): Shark基本上就是在Spark的框架基礎上提供和Hive同樣的H iveQL命令接口,爲了最大程度的保持和Hive的兼容性,Shark使用了Hive的API來實現query Parsing和 Logic Plan generation,最後的PhysicalPlan execution階段用Spark代替Hadoop MapReduce。經過配置Shark參數,Shark能夠自動在內存中緩存特定的RDD,實現數據重用,進而加快特定數據集的檢索。同時,Shark經過UDF用戶自定義函數實現特定的數據分析學習算法,使得SQL數據查詢和運算分析能結合在一塊兒,最大化RDD的重複使用。

Spark streaming: 構建在Spark上處理Stream數據的框架,基本的原理是將Stream數據分紅小的時間片段(幾秒),以相似batch批量處理的方式來處理這小部分數據。Spark Streaming構建在Spark上,一方面是由於Spark的低延遲執行引擎(100ms+)能夠用於實時計算,另外一方面相比基於Record的其它處理框架(如Storm),RDD數據集更容易作高效的容錯處理。此外小批量處理的方式使得它能夠同時兼容批量和實時數據處理的邏輯和算法。方便了一些須要歷史數據和實時數據聯合分析的特定應用場合。

Bagel: Pregel on Spark,能夠用Spark進行圖計算,這是個很是有用的小項目。Bagel自帶了一個例子,實現了Google的PageRank算法。

spark學習

 

六、Spark歷史簡介

Spark是一個開源項目,由多個不一樣的開發者社區進行維護。若是你或你的團隊第一次使用Spark,你可能對它的歷史感興趣。Spark由UC伯克利RAD實驗室(如今是AMP實驗室)在2009年做爲一個研究項目建立。實驗室的研究人員以前基於Hadoop MapReduce工做,他們發現MapReduce對於迭代和交互式計算任務效率不高。所以,在開始階段,Spark主要爲交互式查詢和迭代算法設計,支持內存存儲和高效的容錯恢復。

在2009年Spark建立不久後,就有關於Spark的學術性文章發表,在一些特定任務中,Spark的速度能夠達到MapReduce的10-20倍。

一部分Spark的用戶是UC伯克利的其餘組,包括機器學習的研究人員,如Mobile Millennium項目組,該組用Spark來監控和預測舊金山灣區的交通擁堵狀況。在一個很是短的時間內,許多外部的機構開始使用Spark,如今,已經有超過50個機構在使用Spark,還有一些機構公佈了他們在Spark Meetups和Spark Summit等Spark社區的使用狀況。Spark主要的貢獻者有Databricks,雅虎和因特爾。

在2011年,AMP實驗室開始開發Spark上的上層組件,如Shark和Spark流。全部這些組件有時被稱爲伯克利數據分析棧(Berkeley Data Analytics Stack,BDAS)。

Spark在2010年3月開源,在2014年6月移入Apache軟件基金會,如今是其頂級項目。

參考自

一、百度百科

二、Open經驗庫

三、36大數據

關於更多大數據相關資訊>>>

相關文章
相關標籤/搜索