1、 任務調度
a、RDD Objects---->轉換為DAG有向無環圖
b、DAGScheduler---根據RDD之間的寬窄依賴切分Job,切分為Stage
c、Stage本質上就是---TaskSet,Stage就會以TaskSet形式傳給TaskScheduler
d、TaskScheduler遍歷TaskSet,分配給executor執行
|如果說executor中task執行失敗,跟TaskScheduler申請重試3次,3次仍然失敗
DAGScheduler重試重新發送TaskSet,默認會重試4次。如果仍然失敗,宣告Stage執行失敗
,也就是包含Stage的job宣告執行失敗。
e、推測執行---表示一個spark job中,可能會存在某一些task執行緩慢,推測會啟動
一個相同的task,選擇先執行完的作為結果
|推測執行在spark中默認是關閉的
1、可能出現數據重復寫入
2、集群奔潰。數據傾斜--task本身計算量大,耗時較長
2、spark的資源調度流程
master:管理整個集群的資源
Worker:每啟動一個Worker都注冊在Master上
a、當提交spark的程序時,main會創建driver進程
當執行到val sc=new SparkContext()---會默認創建兩個對象DAGScheduler、
TaskScheduler對象。
b、TaskScheduler向Master發送一個請求,申請程序運行需要資源
c、maste根據TaskScheduler發送的請求,去每一個worker上查看其資源使用情況,
給資源充足的worker上發送一條信息。讓其創建一個executor進程,是一個線程池
用來執行每一個task
d、所有的executor都向TaskScheduler反向注冊,TaskScheduler中一個executor列表
e、任務調度---DAGScheduler切分job---分發TaskSet TaskScheduler
f、TaskScheduler遍歷TaskSet,把每一個task分發最優的executor執行
注意:如果task執行失敗,向TaskScheduler...(任務調度)