原創|行業資訊|編輯:龔雪|2015-12-09 10:39:24.000|閱讀 1128 次
概述:Spark是UC Berkeley AMP lab所開發類似于Hadoop MapReduce的通用并行計算框架,Spark是基于map reduce算法實現分布式計算,擁有Hadoop MapReduce所具有的優點;但不同于MapReduce的是Job中間輸出的結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數據挖掘與機器學習等需要迭代的map reduce算法。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
1、Apache 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 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核心組件提供了定義彈性分布式數據集(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支持你的應用允許在這些集群管理器上。第七章給出了不同的選擇,以及如何選擇正確的集群管理器。
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由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軟件基金會,現在是其頂級項目。
參考資料:
1、
2、
3、
慧都年終盛典火爆開啟,一年僅一次的最強促銷,破冰鉅惠不容錯過!!優惠詳情點擊查看>>
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn