1. 程式人生 > >Spark TaskScheduler 概述

Spark TaskScheduler 概述

面向對象 啟動 str pcl blog appclient gpo 掌握 導致

TaskScheduler 原理:

1. DAGScheduler 在提交Taskset給底層調度器的時候是面向接口TaskScheduler的, 這符合面向對象中依賴抽象原則,帶來底層資源調度器的可插拔性, 導致Spark可以運行在眾多的資源高度器模式上。例如: Standalone, Yarn, Mesos, local. EC2 及其它自定義的資源調度器

2. 在SparkContext實例化的時候通過createTaskScheduler來創建 TaskSchedulerImpl和StandaloneSchedulerBackend。在TaskSchedulerImpl的initialize方法中把StandaloneSchedulerBackend 傳進來從而賦值給TaskSchedulerImpl的backend;在TaskSchedulerImple調用start方法的時候會調用 backend.start方法。

3. TaskScheduler的核心任務是提交TaskSet到集群運算並匯報結果

a) 為TaskSet 創建和維護一個 TaskSetManager 並追蹤任務的本地性以及錯誤信息;

b) 遇到 Straggle 任務會放到其它的節點進行重試

c) 向 DAGScheduler 匯報執行情況,包括在 Shuffle 輸出 lost 的時候報告 fetch failed錯誤等信息

4. TaskScheduler 內部會握有 SchedulerBackend,從 Standalone 的模式來講,具體實現是 StandaloneSchedulerBackend。

5. StandaloneSchedulerBackend 在啟動的時候創建 StandaloneAppClient 實例並在該實例Start的時候啟動了 ClientEndpoint 這個消息循環體,ClientEndpoint 在啟動的時候會向Master註冊當前程序。而 StandaloneSchedulerBackend 的父類 CoarseGrainedSchedulerBackend 在 start 的時候會實例化類型為 DriverEndpoint 的消息循環體。StandaloneSchedulerBackend 專門負責收集 Worker 上的資源信息。當 ExecutorBackend 啟動的時候會發送 RegisteredExecutor 信息向 DriverEndpoint 註冊。此時StandaloneSchedulerBackend 就掌握了當前應用程序擁有的計算資源,就是通過 StandaloneSchedulerBackend 擁有的計算資源來具體運行 Task。

6. SparkContext、DAGScheduler、TaskSchedulerImpl、StandaloneSchedulerBackend 在應用程序啟動的時候只實例化一次,應用程序存在期間始終存在這些對象。

Spark TaskScheduler 概述