1. 程式人生 > >spark第一篇--簡介,應用場景和基本原理

spark第一篇--簡介,應用場景和基本原理

為了滿足挖掘分析與互動式實時查詢的計算需求,騰訊大資料使用了Spark平臺來支援挖掘分析類計算、互動式實時查詢計算以及允許誤差範圍的快速查詢計算,目前騰訊大資料擁有超過200臺的Spark叢集,並獨立維護Spark和Shark分支。Spark叢集已穩定執行2年,我們積累了大量的案例和運營經驗能力,另外多個業務的大資料查詢與分析應用,已在陸續上線並穩定執行。在SQL查詢效能方面普遍比MapReduce高出2倍以上,利用記憶體計算和記憶體表的特性,效能至少在10倍以上。在迭代計算與挖掘分析方面,精準推薦將小時和天級別的模型訓練轉變為Spark的分鐘級別的訓練,同時簡潔的程式設計介面使得演算法實現比MR在時間成本和程式碼量上高出許多。

Spark VS MapReduce

儘管MapReduce適用大多數批處理工作,並且在大資料時代成為企業大資料處理的首選技術,但由於以下幾個限制,它對一些場景並不是最優選擇:

缺少對迭代計算以及DAG運算的支援

Shuffle過程多次排序和落地,MR之間的資料需要落Hdfs檔案系統

Spark在很多方面都彌補了MapReduce的不足,比MapReduce的通用性更好,迭代運算效率更高,作業延遲更低,它的主要優勢包括:

提供了一套支援DAG圖的分散式平行計算的程式設計框架,減少多次計算之間中間結果寫到Hdfs的開銷

提供Cache機制來支援需要反覆迭代計算或者多次資料共享,減少資料讀取的IO開銷

使用多執行緒池模型來減少task啟動開稍,shuffle過程中避免不必要的sort操作以及減少磁碟IO操作

廣泛的資料集操作型別

MapReduce由於其設計上的約束只適合處理離線計算,在實時查詢和迭代計算上仍有較大的不足,而隨著業務的發展,業界對實時查詢和迭代分析有更多的需求,單純依靠MapReduce框架已經不能滿足業務的需求了。Spark由於其可伸縮、基於記憶體計算等特點,且可以直接讀寫Hadoop上任何格式的資料,成為滿足業務需求的最佳候選者。

應用Spark的成功案例

目前大資料在網際網路公司主要應用在廣告、報表、推薦系統等業務上。在廣告業務方面需要大資料做應用分析、效果分析、定向優化等,在推薦系統方面則需要大資料優化相關排名、個性化推薦以及熱點點選分析等。

這些應用場景的普遍特點是計算量大、效率要求高。Spark恰恰滿足了這些要求,該專案一經推出便受到開源社群的廣泛關注和好評。並在近兩年內發展成為大資料處理領域最炙手可熱的開源專案。

本章將列舉國內外應用Spark的成功案例。

1. 騰訊

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

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

2. Yahoo

Yahoo將Spark用在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與Shark的原理

1.Spark生態圈

如下圖所示為Spark的整個生態圈,最底層為資源管理器,採用Mesos、Yarn等資源管理叢集或者Spark自帶的Standalone模式,底層儲存為檔案系統或者其他格式的儲存系統如HBase。Spark作為計算框架,為上層多種應用提供服務。Graphx和MLBase提供資料探勘服務,如圖計算和挖掘迭代計算等。Shark提供SQL查詢服務,相容Hive語法,效能比Hive快3-50倍,BlinkDB是一個通過權衡資料精確度來提升查詢晌應時間的互動SQL查詢引擎,二者都可作為互動式查詢使用。Spark Streaming將流式計算分解成一系列短小的批處理計算,並且提供高可靠和吞吐量服務。

大資料計算新貴Spark在騰訊雅虎優酷成功應用解析

2.Spark基本原理

Spark執行框架如下圖所示,首先有叢集資源管理服務(Cluster Manager)和執行作業任務的結點(Worker Node),然後就是每個應用的任務控制結點Driver和每個機器節點上有具體任務的執行程序(Executor)。

大資料計算新貴Spark在騰訊雅虎優酷成功應用解析

與MR計算框架相比,Executor有二個優點:一個是多執行緒來執行具體的任務,而不是像MR那樣採用程序模型,減少了任務的啟動開稍。二個是Executor上會有一個BlockManager儲存模組,類似於KV系統(記憶體和磁碟共同作為儲存裝置),當需要迭代多輪時,可以將中間過程的資料先放到這個儲存系統上,下次需要時直接讀該儲存上資料,而不需要讀寫到hdfs等相關的檔案系統裡,或者在互動式查詢場景下,事先將表Cache到該儲存系統上,提高讀寫IO效能。另外Spark在做Shuffle時,在Groupby,Join等場景下去掉了不必要的Sort操作,相比於MapReduce只有Map和Reduce二種模式,Spark還提供了更加豐富全面的運算操作如filter,groupby,join等。

Spark採用了Scala來編寫,在函式表達上Scala有天然的優勢,因此在表達複雜的機器學習演算法能力比其他語言更強且簡單易懂。提供各種操作函式來建立起RDD的DAG計算模型。把每一個操作都看成構建一個RDD來對待,而RDD則表示的是分佈在多臺機器上的資料集合,並且可以帶上各種操作函式。如下圖所示:

大資料計算新貴Spark在騰訊雅虎優酷成功應用解析

首先從hdfs檔案裡讀取文字內容構建成一個RDD,然後使用filter()操作來對上次的RDD進行過濾,再使用map()操作取得記錄的第一個欄位,最後將其cache在記憶體上,後面就可以對之前cache過的資料做其他的操作。整個過程都將形成一個DAG計算圖,每個操作步驟都有容錯機制,同時還可以將需要多次使用的資料cache起來,供後續迭代使用。

3.Shark的工作原理

Shark是基於Spark計算框架之上且相容Hive語法的SQL執行引擎,由於底層的計算採用了Spark,效能比MapReduce的Hive普遍快2倍以上,如果是純記憶體計算的SQL,要快5倍以上,當資料全部load在記憶體的話,將快10倍以上,因此Shark可以作為互動式查詢應用服務來使用。

大資料計算新貴Spark在騰訊雅虎優酷成功應用解析

上圖就是整個Shark的框架圖,與其他的SQL引擎相比,除了基於Spark的特性外,Shark是完全相容Hive的語法,表結構以及UDF函式等,已有的HiveSql可以直接進行遷移至Shark上。

與Hive相比,Shark的特性如下:

1.以線上服務的方式執行任務,避免任務程序的啟動和銷燬開稍,通常MapReduce裡的每個任務都是啟動和關閉程序的方式來執行的,而在Shark中,Server執行後,所有的工作節點也隨之啟動,隨後以常駐服務的形式不斷的接受Server發來的任務。

2.Groupby和Join操作不需要Sort工作,當資料量記憶體能裝下時,一邊接收資料一邊執行計算操作。在Hive中,不管任何操作在Map到Reduce的過程都需要對Key進行Sort操作。

3.對於效能要求更高的表,提供分散式Cache系統將表資料事先Cache至記憶體中,後續的查詢將直接訪問記憶體資料,不再需要磁碟開稍。

4.還有很多Spark的特性,如可以採用Torrent來廣播變數和小資料,將執行計劃直接傳送給Task,DAG過程中的中間資料不需要落地到Hdfs檔案系統。

騰訊大資料Spark的概況

騰訊大資料綜合了多個業務線的各種需求和特性,目前正在進行以下工作:

1.經過改造和優化的Shark和Spark吸收了TDW平臺的功能,如Hive的特有功能:元資料重構,分割槽優化等,同時可以通過IDE或者洛子排程來直接執行HiveSql查詢和定時排程Spark的任務;

2.與Gaia和TDW的底層儲存直接相容,可以直接安全且高效地使用TDW叢集上的資料;

3.對Spark底層的使用門檻,資源管理與排程,任務監控以及容災等多個功能進行完善,並支援快速的遷移和擴容。

轉自:http://database.51cto.com/art/201406/442055.htm