1. 程式人生 > >Spark發展現狀與戰線

Spark發展現狀與戰線

前言

現今Spark正是風頭正勁時,Spark本是UCBerkeleyAMPLab誕生的專案,後來捐贈給了Apache來管理原始碼和後續發展。今年從Apache孵化器終於孵化出了1.0版本。其對大資料的支援從記憶體計算和流處理,到互動式查詢,一直到圖計算和機器學習,可謂擺開了架勢、拉長了戰線,一方面挑戰老前輩HadoopMapReduce,另一方面又隨時準備迎接同樣的後起之秀的挑戰。

大資料的今天

今天的大資料系統生物圈百花齊放,有已經如日中天的通用批處理MapReduce,也有針對不同應用場景而特殊化的處理系統。


全棧式的Spark

Spark作為後起之秀,以其RDD模型的強大表現能力,不斷完善自己的功能,逐漸形成了一套自己的生物圈,提供了full-stack

的解決方案。其中主要包括Spark記憶體中批處理,Shark互動式查詢,Spark Streaming流式計算三大部分。此外還有GraphXMLBase提供的常用圖計算和機器學習演算法。


Spark由於採用Scala編寫,底層使用Akka,程式碼十分簡潔。而且藉助RDD的強大表現力,Spark各種子專案的程式碼量也很小。


Spark使用情況

援引自一篇博文,看一下Spark在網際網路界的使用情況。

1. 騰訊

廣點通是最早使用Spark的應用之一。騰訊大資料精準推薦藉助Spark快速迭代的優勢,圍繞“資料+演算法+系統”這套技術方案,實現了在“資料實時採集、演算法實時訓練、系統實時預測”的全流程實時並行高維演算法,最終成功應用於廣點通pCTR

投放系統上,支援每天上百億的請求量。

基於日誌資料的快速查詢系統業務構建於Spark之上的Shark,利用其快速查詢以及記憶體表等優勢,承擔了日誌資料的即席查詢工作。在效能方面,普遍比Hive2-10倍,如果使用記憶體表的功能,效能將會比Hive快百倍。

2. Yahoo

YahooSpark用在Audience Expansion中的應用。Audience Expansion是廣告中尋找目標使用者的一種方法:首先廣告者提供一些觀看了廣告並且購買產品的樣本客戶,據此進行學習,尋找更多可能轉化的使用者,對他們定向廣告。Yahoo採用的演算法是logistic regression。同時由於有些SQL

負載需要更高的服務質量,又加入了專門跑Shark的大記憶體叢集,用於取代商業BI/OLAP工具,承擔報表/儀表盤和互動式/即席查詢,同時與桌面BI工具對接。目前在Yahoo部署的Spark叢集有112臺節點,9.2TB記憶體。

3. 淘寶

阿里搜尋和廣告業務,最初使用Mahout或者自己寫的MR來解決複雜的機器學習,導致效率低而且程式碼不易維護。淘寶技術團隊使用了Spark來解決多次迭代的機器學習演算法、高計算複雜度的演算法等。將Spark運用於淘寶的推薦相關演算法上,同時還利用Graphx解決了許多生產問題,包括以下計算場景:基於度分佈的中樞節點發現、基於最大連通圖的社群發現、基於三角形計數的關係衡量、基於隨機遊走的使用者屬性傳播等。

4. 優酷土豆

優酷土豆在使用Hadoop叢集的突出問題主要包括:第一是商業智慧BI方面,分析師提交任務之後需要等待很久才得到結果;第二就是大資料量計算,比如進行一些模擬廣告投放之時,計算量非常大的同時對效率要求也比較高,最後就是機器學習和圖計算的迭代運算也是需要耗費大量資源且速度很慢。

最終發現這些應用場景並不適合在MapReduce裡面去處理。通過對比,發現Spark效能比MapReduce提升很多。首先,互動查詢響應快,效能比Hadoop提高若干倍;模擬廣告投放計算效率高、延遲小(hadoop比延遲至少降低一個數量級);機器學習、圖計算等迭代計算,大大減少了網路傳輸、資料落地等,極大的提高的計算效能。目前Spark已經廣泛使用在優酷土豆的視訊推薦(圖計算)、廣告業務等。

Spark的戰線

ØDAG執行引擎:不少框架都提出了類似的基於DAG圖的執行引擎,來對MapReduce模型的缺點進行優化。如Apache下的OoizeTez

Ø記憶體計算:作為Spark的殺手鐗,分散式記憶體計算的市場競爭也非常激烈,有非常火的SAPHANA平臺,微軟的Dryad,以及Druid。此外,還有眾多的資料庫廠商推出了記憶體資料庫、記憶體表或記憶體計算網格(data grid)等產品。

Ø互動式查詢(Shark)Hive的效能問題和()實時分析的需求使得不少公司都提出了自己的解決方案。其中最耀眼的當屬無敵的Google提出的Dremel巢狀計算模型。而其開源版本也是眾多,有Cloudera Impala配合Parquet,以及ApacheDrill

Ø流式計算(Streaming Spark)Spark通過將連續的資料流劃分成離散的資料段,從而將觸角伸到了流式處理領域。而在這一領域,TwitterStorm(已捐給Apache)被許多公司採用,也是不可小覷。相比之下,YahooS4就顯得冷清多了。

Ø圖計算(GraphX):圖計算方面,Spark借鑑了PregelPowerGraph中的圖分散式計算和圖切割思想,提出了自己的工具包GraphX。它擴充套件了Spark,例如用EdgeRDD了和VertextRDD表示邊和頂點等。

Ø機器學習(MLBase):機器學習方面,Mahout是個有力的競爭對手,但Mahout也是基於MapReduce任務實現的。而線上機器學習框架Jubatus資料很少,進展不明。

看完這些總結後,不得不佩服Spark的應用範圍之廣!感覺目前Spark唯一沒有單獨建立子專案的就是儲存方面了,主要是中間記憶體計算時的儲存引擎。目前要麼完全由Spark在記憶體中管理,要麼通過Tachyon統一管理。

Spark的未來

Spark 1.0.1

ØSpark SQL(Shark)支援JSON

Spark 1.1

Ø通用Shuffle介面

ØMLLib統計演算法

ØJDBC驅動

Ø基於排序的Shuffle

Spark 1.2

Ø重構儲存支援

Spark 1.3+

ØSparkRR語言統計分析的支援(目前已能下載)


參考資料

1 The State of Spark

3 The Future of Apache Spark