資源排程和任務排程
文字:
大資料計算分兩步
1、資源排程 yarn-client
1、通過spark-submit提交任務
2、在本地啟動Driver val sc = new SparkContext(conf)
3、Driver發請求給RM 啟動AM
4、RM分配資源啟動AM
5、AM向RM申請資源啟動Excutor
6、Excutor反響註冊給Driver
7、開始任務排程(action運算元觸發)
粗粒度資源排程 spark
一次性將所需要的資源(executor數量,executor記憶體,executor core)全部申請下來,task執行不需要再申請資源,執行速度變快
當最後一個task執行完成之後才會釋放資源
缺點:浪費資源,導致資源不能充分利用
細粒度資源排程 mr
每一個task執行都需要單獨申請資源,每次申請資源需要時間,導致task執行變慢--->job變慢---->application變慢
充分利用資源
Application(spark程式)--->Job(一個action運算元觸發的任務)--->stage(一組平行計算的task)--->task(執行任務的最小單元)
2、任務排程
1、當遇到一個action運算元,觸發一個任務,開始任務排程
2、構建DAG有向無環圖
3、DAGscheduler根據寬窄依賴切分stage
4、DAGscheduler將stage以taskSet的形式傳送給taskScheduler
5、taskscheduler根據本地化演算法將task傳送到Execuotr中執行
6、taskscheduler接收task執行情況
如果task失敗taskscheduler負責重試,預設重試3次 如果是因為shuffle file not found taskscheduler不再重試task,而是由DAGscheduler重試上一個stage
DAGscheduler預設重試stage4次
DAGscheduler 負責切分stage
taskscheduler 負責傳送task到Exsecutor中執行