Spark特性
Spark通過在數據處理過程中成本更低的洗牌(Shuffle)方式,將MapReduce提升到一個更高的層次。利用內存數據存儲和接近實時的處理能力,Spark比其他的大數據處理技術的性能要快很多倍。
Spark還支持大數據查詢的延遲計算,這可以幫助優化大數據處理流程中的處理步驟。Spark還提供高級的API以提升開發者的生產力,除此之外還爲大數據解決方案提供一致的體系架構模型。
Spark將中間結果保存在內存中而不是將其寫入磁盤,當需要多次處理同一數據集時,這一點特別實用。Spark的設計初衷就是既可以在內存中又可以在磁盤上工作的執行引擎。當內存中的數據不適用時,Spark操作符就會執行外部操作。Spark可以用於處理大於集羣內存容量總和的數據集。
Spark會嘗試在內存中存儲儘可能多的數據然後將其寫入磁盤。它可以將某個數據集的一部分存入內存而剩餘部分存入磁盤。開發者需要根據數據和用例評估對內存的需求。Spark的性能優勢得益於這種內存中的數據存儲。
Spark的其他特性包括:
· 支持比Map和Reduce更多的函數。
· 優化任意操作算子圖(operator graphs)。
· 可以幫助優化整體數據處理流程的大數據查詢的延遲計算。
· 提供簡明、一致的Scala,Java和Python API。
· 提供交互式Scala和Python Shell。目前暫不支持Java。
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庫