本節書摘來自華章社群《spark大資料分析實戰》一書中的第1章,第1.2節spark生态系統bdas,作者高彥傑 倪亞宇,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視
1.2 spark生态系統bdas
目前,spark已經發展成為包含衆多子項目的大資料計算平台。bdas是伯克利大學提出的基于spark的資料分析棧(bdas)。其核心架構是spark,同時涵蓋支援結構化資料sql查詢與分析的查詢引擎spark sql,提供機器學習功能的系統mlbase及底層的分布式機器學習庫mllib,并行圖計算架構graphx,流計算架構spark streaming,近似查詢引擎blinkdb,記憶體分布式檔案系統tachyon,資源管理架構mesos等子項目。這些子項目在spark上層提供了更高層、更豐富的計算範式。

下面對bdas的各個子項目進行更詳細的介紹。
(1)spark
spark是整個bdas的核心元件,是一個大資料分布式程式設計架構,不僅實作了mapreduce的算子map函數和reduce函數及計算模型,還提供了更為豐富的算子,例如f?ilter、join、groupbykey等。spark将分布式資料抽象為rdd(彈性分布式資料集),并實作了應用任務排程、rpc、序列化和壓縮,并為運作在其上層的元件提供api。其底層采用scala這種函數式語言書寫而成,并且所提供的api深度借鑒函數式的程式設計思想,提供與scala類似的程式設計接口。
圖1-2所示即為spark的處理流程(主要對象為rdd)。
spark将資料在分布式環境下分區,然後将作業轉化為有向無環圖(dag),并分階段進行dag的排程和任務的分布式并行處理。
(2)spark sql
spark sql提供在大資料上的sql查詢功能,類似于shark在整個生态系統的角色,它們可以統稱為sql on spark。之前,由于shark的查詢編譯和優化器依賴hive,使得shark不得不維護一套hive分支。而spark sql使用catalyst作為查詢解析和優化器,并在底層使用spark作為執行引擎實作sql的算子。使用者可以在spark上直接書寫sql,相當于為spark擴充了一套sql算子,這無疑更加豐富了spark的算子和功能。同時spark sql不斷相容不同的持久化存儲(如hdfs、hive等),為其發展奠定廣闊的空間。
(3)spark streaming
spark streaming通過将流資料按指定時間片累積為rdd,然後将每個rdd進行批處理,進而實作大規模的流資料處理。其吞吐量能夠超越現有主流流處理架構storm,并提供豐富的api用于流資料計算。
(4)graphx
graphx基于bsp模型,在spark之上封裝類似pregel的接口,進行大規模同步全局的圖計算,尤其是當使用者進行多輪疊代的時候,基于spark記憶體計算的優勢尤為明顯。
(5)mllib
mllib是spark之上的分布式機器學習算法庫,同時包括相關的測試和資料生成器。mllib支援常見的機器學習問題,例如分類、回歸、聚類以及協同過濾,同時也包括一個底層的梯度下降優化基礎算法。