隨着處理器提升速度下降和數據量的不斷增長,很多公司和組織(既有互聯網公司也有傳統的企業還有一些研究機構)都要求他們的應用能夠Scale out到更大的分佈式系統上(比如整個數據中心)。這些應用又分爲以下幾種類型:
- 機器學習類型的應用(machine learning algorithms)
- 查詢類型應用 (simple queries)
- 圖處理類型應用 (graph analysis)
- 批處理應用 (batch processing)
- 實時流分析應用 (real-time streaming analysis)
新的計算平臺不僅要能夠支持傳統的計算負載,還能支撐未來的新興的各種複雜的應用。
本文爲集羣計算系統提出一種架構,既能解決傳統的批處理應用,還能再保證可擴展性和容錯的前提下處理交互式查詢和流式應用。當前大部分系統僅僅支持簡單的單趟計算(one-pass computations),我們的系統可以支持多趟計算(如機器學習算法中的迭代計算)。最後,我們的架構支持多種計算組合,這使得大量的的新應用可以混合。
我們主要是通過對MapReduce增加一個共享數據的原語(primitive),稱之爲RDD,實現以上的效果。我們將說明RDD足以解決大量不同的工作負載。Spark系統是RDD的具體實現,我們使用大量的Benchmark和真實用戶應用對其進行評估。對於大量的應用,Spark的性能都超過了運行它們的專有系統,同時還能支持這些負載之間相互組合,同時還能保證容錯。接下來,我們將從理論和實踐兩個角度來探討爲什麼RDD可以有效的支持大量的應用。