Spark系列課程-00xxSpark任務調度

下面我們一起來看一下Spark的任務調度

Spark任務調度.png

首先最左邊的叫做RDD Object就是一個一個的RDD對象
一個一個的RDD對象,可以組成一個有向無環圖
一個有向無環圖,我們也可以把他叫做一個Application應用程序
有向無環圖用代碼來表示,他就是一個應用程序

image.png

疑問,生成有向無環圖的這個東西叫什么名字?

然后他把DAG傳給了一個叫做DAGScheduler的一個東西
DAGScheduler是一個對象,他是任務調度的一個高層調度器

DAGScheduler這個對象他有什么作用?
我們看下邊

image.png

DAGScheduler干的第一件事就是把DAG給切割了,
那他把DAG切割成什么了?切割成一個個Stage了
他那切割Stage依據的是什么?依據RDD之間的寬窄依賴

然后他又以StaskSet的形式提交給TaskScheduler

image.png

TaskScheduler我們叫做是——Spark任務調度的底層調度器

TaskSet和Stage有什么區別呢?
沒有區別,
Stage我們說他是有一組可以并行計算的task
TaskSet看他的名字就知道他是一些Task的集合,
只不過封裝的對象不一樣而已。

剛剛我們都說的是提交,但實際上,是調用了TaskScheduler的一個方法,把TaskSet當做參數傳遞進來了。

然后TaskScheduler會遍歷TaskSet這個集合
拿到每一個Task之后,他會把這些Task發送到每一個計算節點當中去。
計算節點我們叫什么?叫做Executor
TaskScheduler會遍歷TaskSet里面的每一個Task,然后把Task提交到Executor中的線程池中去。
Executor中執行的Task的執行狀態,會向TaskScheduler來反饋
Task是有可能會失敗的,在線程池中執行,是有可能會失敗的對吧?

如果Task運行失敗,TaskScheduler是負責失敗重試,TaskScheduler會把失敗的任務,重新發送給Executor默認重試發送3次,
如果3次依然失敗,那么這個Task所在的Stage就失敗了
如果Stage失敗了怎么辦?
由DAGScheduler負責重新發送Stage,重試次數是4次,如果重試提交Stage4次依然還是失敗的話
整個Job就失敗了,如果job失敗了,他整個Application就失敗了。

TaskScheduler除了能重新發送失敗的task
還能處理落后的task,如果TaskScheduler發現落后的Task

我們總結一下TaskScheduler

  1. launch Task
  2. retry failed
    3.Straggling Task
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容