2016年4月18日

Apache Spark 應用情境

以往的 Big Data 大都是跟 Hadoop 劃上等號,以 Scala 實作的 Spark 以數十倍甚至百倍於 Hadoop 的處理速度聞名,原因在於 Spark 是基於記憶體而 Hadoop 是硬碟,因為這個基本條件的差別,以下整理一些來自於網路的資料,瞭解 Spark 的應用情境。

Spark 的定位

目前 Big Data 處理有以下幾個類型

  1. Batch Data Processing 複雜的批量處理 偏重於處理海量數據的能力,可忍受處理的時間在數十分鐘到數小時。可以用Hadoop的MapReduce來進行批量海量數據處理。

  2. Interactive Query 基於歷史數據的交互式查詢 可忍受處理的時間在數十秒到數十分鐘之間。可以Impala進行交互式查詢。

  3. Streaming Data Processing 即時資料流處理 可忍受處理的時間在數百毫秒到數秒之間。可以用Storm分佈式處理框架處理即時資料流。

而 Spark 定位在可以同時滿足以上應用的情境。

1,Spark是基於內部記憶體的迭代計算框架,適用於需要多次操作特定數據集的應用場合。需要反覆操作的次數越多,所需讀取的數據量越大,受益越大,數據量小但是計算密集度較大的場合,受益就相對較小。

2,由於RDD的特性,Spark不適合用在那種異步細維度更新狀態的應用,例如 web 服務的存儲或者是持續增加的web page index。就是對於那種增量修改的應用模型不適合。

3,數據量不是特別大,但是要求即時統計分析需求。

Hadoop, Spark, Storm

  • Hadoop常用於離線的、大量的複雜數據處理,採用MapReduce分佈式計算框架,並根據GFS開發了HDFS分佈式文件系統,使用HBase數據儲存系統。資料儲存在硬碟中,每次運算之後的結果需要儲存在HDFS裡面,下次再用的話,還需要再讀出來進行一次計算,磁盤IO開銷比較大。

  • Spark常用於離線的、快速的大數據處理,Spark使用記憶體來儲數存據,因此Spark可以提供超過Hadoop100倍的運算速度。但是,由於記憶體斷電後會遺失資料,Spark不適合處理需要長期保存的資料。

  • Storm 常用於 Real Time 的大數據處理,Storm在Hadoop的基礎上提供了實時運算的特性,可以實時的處理大數據流。不同於Hadoop和Spark,Storm不進行數據的收集和存儲工作,它直接通過網絡即時的接受並處理資料,然後直接通過網絡即時傳回結果。

誰可以使用 Spark?

  • Data Scientist 以往會使用 Python, Matlab, or R,目的是分析資料,並找出這些資料中隱藏的資訊。 Spark Shell 可使用 Python 或 Scala 進行互動式資料分析。Spark SQL 有獨立的 SQL Shell 可利用 SQL 進行資料處理。MLLib 函式庫是用來支援 Machine Learning 與 Data Analysis。也可以呼叫外部以 Matlab 或 R 實作的程式。

  • Data Processing Applications Spark 可在 clusters 之間平行處理資料,隱藏了分散式運算、網路傳輸、錯誤處理的複雜度。簡單地說,如果有某個應用程式的某一個部分,需要即時資料分析的數據,那麼在這個應用程式背後,可以劃分一個區塊,利用 Spark 進行即時運算,然後顯示在應用程式的畫面上。

Spark Streaming

Spark Streaming 支援以下三種業務場景 * 無狀態操作 只關注當前的 DStream 中的即時資料,例如對當前DStream中的資料做正確性校驗。

  • 有狀態操作 對有狀態的 DStream 進行操作時,需要依賴以前的資料,例如統計網站各個模塊總的訪問量。

  • 窗口操作 對指定時間段範圍內的 DStream 數據進行操作,例如需要統計一天之內網站各個模塊的訪問數量。

騰訊、雅虎、優酷 應用的參考

  1. 騰訊

    廣點通 pCTR 投放系統是最早使用Spark的應用之一,支援每天上百億的請求量。

    基於日誌數據的快速查詢系統業務構建於Spark之上的Shark,利用其快速查詢以及內存表等優勢,提供日誌數據的即時查詢功能。在性能方面,普遍比Hive高2-10倍。

  2. Yahoo

    Yahoo將Spark用在Audience Expansion中的應用。Audience Expansion是廣告中尋找目標用戶的一種方法:首先廣告者提供一些觀看了廣告並且購買產品的樣本客戶,據此進行學習,尋找更多可能轉化的用戶,對他們定向廣告。

    Yahoo採用的算法是logistic regression。同時由於有些SQL負載需要更高的服務質量,又加入了專門跑Shark的大內存集群,用於取代商業BI/OLAP工具,承擔報表/儀表盤和交互式/即席查詢,同時與桌面BI工具對接。目前在Yahoo部署的Spark集群有112台節點,9.2TB內存。

  3. 淘寶

    淘寶技術團隊將Spark運用於淘寶的推薦相關算法上,同時還利用Graphx解決了許多問題,包括以下計算場景:基於度分佈的中樞節點發現、基於最大連通圖的社區發現、基於三角形計數的關係衡量、基於隨機遊走的用戶屬性傳播等。

  4. 優酷土豆

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

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

References

Spark適用哪些場景?

RDD:基於內存的集群計算容錯抽象

Cisco电话面试【Spark方向】

大數據三大平台hadoop,storm,spark的區別和應用場景

Spark Streaming 的原理以及應用場景介紹

解析Spark在騰訊、雅虎、優酷的成功應用

2分鐘讀懂大數據框架Hadoop和Spark的異同