天天看點

Spark修煉之道(進階篇)——Spark源碼閱讀:第九節 Task執行成功時的結果處理Task執行成功時的結果處理

在上一節中,給出了task在executor上的運作代碼示範,我們知道代碼的最終運作通過的是taskrunner方法

狀态更新時,先調用的是coarsegrainedexecutorbackend中的statusupdate方法

driverendpoint中的receive方法接收并處理發送過來的statusupdate消息,具體源碼如下:

taskschedulerimpl中的statusupdate方法源碼如下:

對于task執行成功的情況,它會調用taskresultgetter的enqueuesuccessfultask方法進行處理:

taskschedulerimpl中的handlesuccessfultask方法将最終對計算結果進行處理,具有源碼如下:

tasksetmanager.handlesuccessfultask方法源碼如下:

進入dagscheduler的taskended方法

跳轉到onreceive方法當中,可以看到其調用的是onreceive

跳轉到doonreceive方法到當中,可以看到

dagscheduler.handletaskcompletion方法完成計算結果的處理

執行流程:

1. org.apache.spark.executor.taskrunner.statusupdate方法

2. org.apache.spark.executor.coarsegrainedexecutorbackend.statusupdate方法

3. org.apache.spark.scheduler.cluster.coarsegrainedschedulerbackend#driverendpoint.recieve方法,driverendpoint是内部類

4. org.apache.spark.scheduler.taskschedulerimpl中的statusupdate方法

5. org.apache.spark.scheduler.taskresultgetter.enqueuesuccessfultask方法

6. org.apache.spark.scheduler.dagscheduler.handletaskcompletion方法