spark是一個用來實現快速而通用的集羣計算的平臺算法
他的一個主要特色是可以在內存中計算,於是更快。不過即便是必須在磁盤上進行的複雜計算,spark依然比MapReduce更加高效。sql
總的來講,spark適用於各類各樣原先須要多種不一樣的分佈式平臺的場景,包括批處理、迭代算法、交互式查詢、流處理。經過一個統一的框架支持這些不一樣的計算,spark能夠簡單低耗的把這些處理流程整合在一塊兒。 所以spark的核心引擎由這通用和速度快的特色。apache
下面分別介紹各個組件:編程
spark core實現了spark的基本功能,包含任務調度、內存管理、錯誤回覆、與存儲交互等模塊。spark core中還包含了對彈性分佈式數據集(resilient distributed dataset) 簡稱RDD 的api定義。RDD表示分佈分佈在多個計算節點上能夠並行操做的元素集合,是spark主要的編程抽象。spark core提供了建立和操做這些集合的多個api。api
spark sql 是用來操做結構化數據的程序包。經過spark sql咱們能夠使用sql或者Apache Hive 版本的sql方言來查詢數據。spark sql支持多種數據源,好比Hive表、Paquet以及Json等。開發這均可以在單個的應用中同時使用sql和複雜的數據分析。服務器
spark streaming 是spark提供的對實時數據進行流式計算的組件。好比生產環境中的網頁服務器izhi,或者是網絡服務中用戶提交的狀態更新組成的消息隊列,都是數據流。spark streaming提供了用來操做數據流的api,而且與spark core中的RDD api高度對應。這樣不管是操做內存或者是硬盤,或者是實時數據流,都能應對自如。從底層設計來看,spark streaming 支持與spark core同級別的容錯行,吞吐量以及可伸縮性。網絡
這是一個常見機器學習ML功能的程序庫,叫作MLib。Mlib提供了不少中機器學習算法,包括分類、迴歸、聚類、協同過濾等。框架
GraphX 是用來操做圖)(好比社交網絡的朋友關係圖)的程序庫,能夠進行並行的圖計算。與spark streaming和spark sql相似,GraphX也擴展了spark的RDD api,能用來建立一個頂點和邊都包含任意屬性的有向圖。GraphX還支持針對圖的各類操做,好比圖分割,和操做全部定點,以及經常使用圖算法。機器學習
就底層而言,spark設計能夠高效的在一個計算節點到術前個計算節點之間伸縮的計算,spark靈活的支持在各類集羣管理器上運行,包括Hadoop YARN,Apache Mesos,以及spark自帶的一個簡易的調度器。若是要在沒有安裝任何集羣管理器上安裝spark,那麼spark自帶的獨立調度器可讓你輕鬆入門,而若是在已經安裝了Hadoop YARN 或者Mesos的集羣,你的應用一樣能夠流暢的運行在機器上。分佈式
spark是由一個強大而活躍的開源社區開發和維護的。2009年做爲一個研究項目在加州大學伯克利分校RAD實驗室誕生。spark一開始是爲交互式查詢和迭代算法設計的,同時還支持內存式存儲和高效的容錯機制。
2009年誕生
2010年3月開源
2013年6月交給了apache基金會,如今已經成爲了apache下面的頂級項目