標籤:
原文名稱:7 tools to fire up Spark‘s big data engine
Spark正在資料處理領域捲起一場風暴。讓我們通過本篇文章,看看為Spark的大資料平台起到推波助瀾的幾個重要工具。
Spark生態系統眾生相
Apache Spark不僅僅讓大資料處理起來更快,還讓大資料處理起來更簡單、功能更強大、更方便。Spark並非只是一項技術,它結合了諸多部分,新的功能和效能改進不斷添加進來,每個部分都在不斷完善之中。
本文介紹了Spark生態系統的每個主要部分:每個部分的功能,為什麼很重要,是如何發展的,在哪方面不盡如人意,以及可能會往哪個方向發展。
Spark Core
Spark的核心是恰如其名的Spark Core。除了協調和調度作業外,Spark Core還為Spark中的資料處理提供了基本的抽象機制,名為彈性分布式資料集(RDD)。
RDD對資料執行兩個動作:轉換和操作。前者轉換資料,並將它們作為剛創新的RDD來提供;後者根據現有的RDD(比如對象數量)來計算結果。
Spark的速度很快,原因是轉換和操作都儲存在記憶體中。操作慢騰騰地評估,這意味著只有需要相關的資料時,才執行操作;然而,很難搞清楚什麼在緩慢運行。
Spark的速度在不斷提高。Java的記憶體管理往往給Spark帶來問題,於是Project Tungsten計劃避開JVM的記憶體和垃圾收集子系統,以此提高記憶體效率。
Spark API
Spark主要是用Scala編寫的,所以Spark的主要API長期以來也支援Scala。不過另外三種使用廣泛得多的語言同樣得到支援:Java(Spark也依賴它)、Python和R.
總的來說,你最好選擇自己最擅長的那種語言,因為你需要的功能特性很可能在該語言中直接得到支援。只有一個例外:相比之下,SparkR中對機器學習的支援不大給力,目前只有一小批演算法可供使用。不過將來這種情況勢必會發生變化。
Spark SQL
千萬不要低估了能夠對批量資料執行SQL查詢的能力或便利。Spark SQL提供了對Spark提供的資料執行SQL查詢(並且請求列式DataFrame)的一種通用機制,包括通過ODBC/JDBC串連件進行管道處理的查詢。你甚至不需要正規的資料來源。Spark 1.6中添加了這一功能:支援以一種得到支援的格式查詢扁平檔案,就像Apache Drill那樣。
Spark SQL其實並不用於更新資料,因為那與Spark的整個意義相悖。可以將因而產生的資料寫回成新的Spark資料來源(比如新的Parquet表),但是UPDATE查詢並不得到支援。別指望諸如此類的功能特性很快就會推出;著眼於Spark SQL的改進大多數用於提升其效能,因為它也成了Spark Streaming的基礎。
Spark Streaming
Spark的設計讓它得以支援許多處理方法,包括流處理――Spark Streaming因此得名。關於Spark Steaming的傳統觀點是,它還半生不熟,這意味著只有你不需要瞬間延遲,或者如果你還沒有投入到另一種流資料處理解決方案(比如說Apache Storm),你才會使用它。
但是Storm在逐漸失去人氣;長期使用Storm的推特此後已改用了自己的項目Heron。此外,Spark 2.0承諾會推出一種新的“結構化資料流”模式,以便對即時資料進行互動式Spark SQL查詢,包括使用Spark?的機器學習庫。至於其效能是否高得足以擊敗競爭者仍需拭目以待,不過它值得認真考慮。
MLlib(機器學習)
機器學習技術素有既神奇,又困難之稱。Spark讓你可以對Spark中的資料運行許多常見的機器學習演算法,從而使這些類型的分析容易得多,也更容易被Spark使用者所使用。
MLlib中的可用演算法數量眾多,該架構每推出一個修訂版,就會隨之增多。話雖如此,一些類型的演算法還是沒有――比如說,涉及深度學習的任何演算法。第三方正在利用Spark的人氣來填補這一空白;比如說,雅虎可以藉助CaffeOnSpark執行深度學習,它通過Spark充分利用了Caffe深度學習系統。
GraphX??(圖形計算)
描繪數百萬實體之間的關係通常需要圖形,這種資料構件描述了那些實體之間的相互關係。Spark的GraphX?? API讓你可以使用Spark的一套方法,對資料執行圖形操作,於是構建和轉換這類圖形的繁重任務卸載到了Spark。GraphX??還包括用於處理資料的幾種常見演算法,比如PageRank或標籤傳播(label propagation)。
從目前來看,GraphX的??一個主要限制是,它最適合靜態圖形。處理添加了新頂點的圖形會嚴重影響效能。此外,如果你已經在使用一種成熟的圖形資料庫解決方案,GraphX還??不太可能取代它。
SparkR(Spark上的R)
R語言為進行統計數值分析和機器學習工作提供了一種環境。Spark在2015年6月添加了支援R的功能,以匹配其支援Python和Scala的功能。
除了為潛在的Spark開發人員多提供一種語言外,SparkR還讓R程式員們可以做之前做不了的許多事情,比如訪問超過單一機器的記憶體容量的資料集,或者同時輕鬆地使用多個進程或在多個機器上運行分析。
SparkR還讓R程式員可以充分利用Spark中的MLlib機器學習模組,建立一般的線性模型。遺憾的是,並非所有的MLlib功能在SparkR中得到支援,不過Spark每推出一個後續的修訂版,都在填補R支援方面的差距。
布加迪編譯來源:51CTO.com
引爆Spark大資料引擎的七大工具