Spark是一個用來實現快速而通用的集羣計算的平臺。擴展了普遍使用的MapReduce計算模型,並且高效地支持更多的計算模式,包括交互式查詢和流處理。在處理大規模數據集的時候,速度是很是重要的。Spark的一個重要特色就是可以在內存中計算,於是更快。即便在磁盤上進行的複雜計算,Spark依然比MapReduce更加高效。Spark與Hadoop緊密集成,他能夠在YARN上運行,並支持Hadoop文件格式及其儲存後端HDFShtml
Mapreduce | Spark |
數據存儲結構:hdfs文件系統的split | 使用內存構建彈性分佈式數據集RDD,對數據進行運算和cachenode |
編程範式:Map+Reduce | 計算中間數據在內存中的維護,存取速度是磁盤的多個數量級 |
Task以進程的方式維護,任務啓動就要幾秒鐘 | Task以線程的方式維護,對小數集的讀取能達到亞秒級的延遲 |
組件的功能編程
ClusterManager:在Standalone模式中即爲Master節點(主節點),控制整個集羣,監控Worker.在YARN中爲ResourceManagerWorker:從節點,負責控制計算節點,啓動Executor或Driver。在YARN模式中爲後端
NodeManager:負責計算節點的控制。框架
Driver:運行Application的main()函數並建立SparkContect。分佈式
Executor:執行器,在worker node上執行任務的組件、用於啓動線程池運行任務。每一個Application擁有獨立的一組Executor。函數
SparkContext:整個應用的上下文,控制應用的生命週期。oop
RDD:Spark的計算單元,一組RDD可造成執行的有向無環圖RDD Graph。性能
DAG Scheduler:根據做業(Job)構建基於Stage的DAG,並提交Stage給TaskScheduler。spa
TaskScheduler:將任務(Task)分發給Executor。
SparkEnv:線程級別的上下文,存儲運行時的重要組件的引用。
SparkEnv內構建幷包含以下一些重要組件的引用:
一、MapOutPutTracker:負責Shuffle元信息的存儲。
二、BroadcastManager:負責廣播變量的控制與元信息的存儲。
三、BlockManager:負責存儲管理、建立和查找快。
四、MetricsSystem:監控運行時性能指標信息。
五、SparkConf:負責存儲配置信息。
組件的執行流程
1. 每一個Spark應用都由一個驅動器程序(Driver Program)來發起集羣上的各類並行操做。啓動器包含應用的main函數,驅動器負責建立SparkContext(上下文);SparkContext能夠與不一樣種類的集羣資源管理器(Cluster Manager),例如Yarn進行通訊。
2. SparkContext 獲取到集羣進行所需的資源後,將獲得集羣中工做階段(Worker Node)上對應的 Executor(不一樣的Spark程序有不一樣的Executor,他們之間是互相獨立的進程,Executor爲應用程序提供分佈式計算以及數據存儲功能)
3. 以後SparkContext將應用程序代碼發送到各個Executor,最後將Task(任務)分配給Executors執行
一、Client提交應用。
二、Master找到一個Worker啓動Driver
三、Driver向Master或者資源管理器申請資源,以後將應用轉化爲RDD Graph
四、再由DAGSchedule將RDD Graph轉化爲Stage的有向無環圖提交給TaskSchedule。
五、再由TaskSchedule提交任務給Executor執行。
六、其它組件協同工做,確保整個應用順利執行。
一、基於YARN的Spark做業首先由客戶端生成做業信息,提交給ResourceManager。
二、ResourceManager在某一NodeManager彙報時把AppMaster分配給NodeManager。
三、NodeManager啓動SparkAppMaster。
四、SparkAppMastere啓動後初始化而後向ResourceManager申請資源。
五、申請到資源後,SparkAppMaster經過RPC讓NodeManager啓動相應的SparkExecutor。
六、SparkExecutor向SparkAppMaster彙報並完成相應的任務。
七、SparkClient會經過AppMaster獲取做業運行狀態。