在上一節中,給出了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方法