由於單臺機器的計算能力和I/O能力已經無法滿足不斷增長的數據處理需求,越來越多的組織需要將應用擴展到更大規模的集羣上。但在集羣環境中,可編程性方面將遇到以下幾個挑戰:
- 並行編程問題;爲了將應用並行化,需要並行編程模型的支撐。
- 容錯和慢節點問題;當集羣規模相當大時,這個問題也是非常嚴重的。
- 多用戶共享集羣要求能具備彈性計算的能力,此外還要考慮干擾問題。
結果就是出現了很多編程模型,首先是MapReduce使數據批處理變得簡單通用同時能處理容錯。但很難處理其它類型的負載,於是就出現了各種各樣專用的編程模型:
- Pregel,用來解決迭代圖算法問題
- F1,處理SQL查詢
- MillWheel,持續流處理
- Storm,Impala,Piccolo,GraphLib...
- 一個運行時系統同時支持批處理,迭代,流處理計算,交互式查詢。這讓由這幾種計算模型組合而成的大量的新興應用成爲可能。同時在性能上比單獨的分佈式系統有更大的提升。
- 提供高強度的容錯和慢節點容忍方案。
- 相比於MapReduce,性能有100倍以上的提升。
- 支持多租戶,支持資源彈性調度。
專用系統的問題
- 重複工作,每個系統都需要考慮容錯和負載分佈等問題。
- 組合,不同專用系統的計算組合起來非常苦難
- 範圍有限,如果應用和系統不符,要麼修改應用,要麼發明新系統
- 資源共享,不同計算系統之間共享數據非常困難,因爲每個系統都假設自己擁有整個集羣的資源
- 管理維護,每個系統都需要重新學習其API,運行原理,部署方法等等...
彈性分佈式數據集(RDD)
基於RDD的模型
- 迭代算法,RDD可以解決迭代算法問題
- 關係數據庫查詢,對應的是Shark SQL
- MapReduce,RDD可以支持MapReduce類型和Dryad類型的應用
- 流處理,基於RDD實現的流處理,稱之爲D-Stream
- 組合模型,基於RDD可以將以上幾種模型組合起來以構造更加複雜的應用。