用Apache Spark進行大資料處理二
Spark特性
Spark通過在資料處理過程中成本更低的洗牌(Shuffle)方式,將MapReduce提升到一個更高的層次。利用記憶體資料儲存和接近實時的處理能力,Spark比其他的大資料處理技術的效能要快很多倍。
Spark還支援大資料查詢的延遲計算,這可以幫助優化大資料處理流程中的處理步驟。Spark還提供高階的API以提升開發者的生產力,除此之外還為大資料解決方案提供一致的體系架構模型。
Spark將中間結果儲存在記憶體中而不是將其寫入磁碟,當需要多次處理同一資料集時,這一點特別實用。Spark的設計初衷就是既可以在記憶體中又可以在磁碟上工作的執行引擎。當記憶體中的資料不適用時,Spark
Spark會嘗試在記憶體中儲存儘可能多的資料然後將其寫入磁碟。它可以將某個資料集的一部分存入記憶體而剩餘部分存入磁碟。開發者需要根據資料和用例評估對記憶體的需求。Spark的效能優勢得益於這種記憶體中的資料儲存。
Spark的其他特性包括:
· 支援比Map和Reduce更多的函式。
· 優化任意操作運算元圖(operator graphs)。
· 可以幫助優化整體資料處理流程的大資料查詢的延遲計算。
· 提供簡明、一致的Scala,Java和Python API。
· 提供互動式Scala和Python Shell
Spark是用Scala程式設計語言編寫而成,運行於Java虛擬機器(JVM)環境之上。目前支援如下程式設計語言編寫Spark應用:
· Scala
· Java
· Python
· Clojure
· R
Spark生態系統
除了Spark核心API之外,Spark生態系統中還包括其他附加庫,可以在大資料分析和機器學習領域提供更多的能力。
這些庫包括:
· Spark Streaming:
o Spark Streaming基於微批量方式的計算和處理,可以用於處理實時的流資料。它使用DStream,簡單來說就是一個彈性分散式資料集(RDD)系列,處理實時資料。
· Spark SQL:
o Spark SQL可以通過JDBC API將Spark資料集暴露出去,而且還可以用傳統的BI和視覺化工具在Spark資料上執行類似SQL的查詢。使用者還可以用Spark SQL對不同格式的資料(如JSON,Parquet以及資料庫等)執行ETL,將其轉化,然後暴露給特定的查詢。
· Spark MLlib:
o MLlib是一個可擴充套件的Spark機器學習庫,由通用的學習演算法和工具組成,包括二元分類、線性迴歸、聚類、協同過濾、梯度下降以及底層優化原語。
· Spark GraphX:
o GraphX是用於圖計算和並行圖計算的新的(alpha)Spark API。通過引入彈性分散式屬性圖(Resilient Distributed Property Graph),一種頂點和邊都帶有屬性的有向多重圖,擴充套件了Spark RDD。為了支援圖計算,GraphX暴露了一個基礎操作符集合(如subgraph,joinVertices和aggregateMessages)和一個經過優化的Pregel API變體。此外,GraphX還包括一個持續增長的用於簡化圖分析任務的圖演算法和構建器集合。
除了這些庫以外,還有一些其他的庫,如BlinkDB和Tachyon。
BlinkDB是一個近似查詢引擎,用於在海量資料上執行互動式SQL查詢。BlinkDB可以通過犧牲資料精度來提升查詢響應時間。通過在資料樣本上執行查詢並展示包含有意義的錯誤線註解的結果,操作大資料集合。
Tachyon是一個以記憶體為中心的分散式檔案系統,能夠提供記憶體級別速度的跨叢集框架(如Spark和MapReduce)的可信檔案共享。它將工作集檔案快取在記憶體中,從而避免到磁碟中載入需要經常讀取的資料集。通過這一機制,不同的作業/查詢和框架可以以記憶體級的速度訪問快取的檔案。
此外,還有一些用於與其他產品整合的介面卡,如Cassandra(Spark Cassandra
聯結器)和R(SparkR)。Cassandra Connector可用於訪問儲存在Cassandra資料庫中的資料並在這些資料上執行資料分析。
下圖展示了在Spark生態系統中,這些不同的庫之間的相互關聯。
圖1. Spark框架中的庫
我們將在這一系列文章中逐步探索這些Spark庫