Spark比MR快的原因
1、Spark基於記憶體的計算
2、粗粒度資源排程
3、DAG有向無環圖:可以根據寬窄依賴劃分出可以平行計算的task
細粒度資源排程
MR是屬於細粒度資源排程
優點:每個task執行的時候單獨申請資源,資源被充分利用
缺點:task啟動速度慢
粗粒度資源排程
Spark是屬於粗粒度資源排程
優點:一次性將所有需要的資源都申請下來,task後續啟動就不需要額外申請資源,啟動速度非常快
缺點:會造成資源的浪費,因為只有當最後一個task執行完以後資源才會被釋放
資源申請
1、使用spark-sumbit提交任務
2、在提交任務的節點啟動Driver程式:Drive主要負責任務排程
3、Driver程式會向RM申請資源啟動AM
4、RM會隨機分配一臺NM啟動AM
5、AM又會向RM申請資源啟動一批Executor
6、RM會分配資源在NM中啟動Executor
7、Executor啟動後會反向註冊給Drive端
資源排程
1、當遇到一個action運算元的時候,開始觸發一個job進行任務排程
2、根據程式碼,構建DAG有向無環圖
3、DAGScheduler會根據寬窄依賴切分Stage:Stage:是一組可以平行計算的Task
4、會將每個Stage以TaskSet的形式傳送個TaskScheduler
5、TaskScheduler會將Task依次傳送到Executor中執行
Task的重試機制
1、Task如果失敗了,會由TaskScheduler重試3次
2、如果還是失敗了,會由DAGScheduler將Stage重試4次
3、如果出現Shuffle file not found,DAGScheduler會去將上游的Stage進行重試
推測執行
當某個task執行太慢的時候,TaskSchedule會傳送一個一模一樣的task去執行,最終結果誰先執行完就以誰為準