spark2原理分析-Task排程物件實現介面(Schedulable)原理分析
阿新 • • 發佈:2018-12-13
概述
本文分析任務排程器TaskScheduler中的排程實體的實現合約的原理。
TaskScheduler中的排程物件
在TaskScheduler中排程物件是實現了合約(即:介面)Schedulable的類的物件。
Schedulable是是可排程實體的合約,可以在這裡檢視該介面的實現程式碼。
在spark2中有兩個類實現了排程實體介面:Schedulable。也就是說有兩種排程實體:
- Pool
- TaskSetManager
在後面的文章中會對這兩種排程實體進行詳細分析。
排程物件介面分析
通過檢視原始碼我們知道,該介面包括以下一些成員,下面分別講解這些成員變數的意義。
- name
def name: String
每個可排程實體都有一個名稱。
- parent
var parent: Pool
該成員表示依賴的Pool可以排程實體,通過parent可以構建一顆樹
- schedulableQueue
def schedulableQueue: ConcurrentLinkedQueue[Schedulable]
管理一套可排程的實體集,是一個同步佇列,所以和該佇列對應的有兩個操作函式:
def addSchedulable(schedulable: Schedulable): Unit def removeSchedulable(schedulable: Schedulable): Unit
用來向佇列中新增和刪除排程物件。
- schedulingMode
def schedulingMode: SchedulingMode
該成員變數代表排程模式,不同調度模式對應不同的排程演算法。
- stageId
def stageId: Int
表示該排程物件對應的stage id。
- weight,minShare,priority
def weight: Int
def minShare: Int
def priority: Int
權重,時間,優先順序,這些成員在進行任務排程時,用來計算任務的優先順序。
- getSchedulableByName
def getSchedulableByName(name: String): Schedulable
通過該函式可以根據排程實體的名稱,來查詢該物件。
- executorLost
def executorLost(executorId: String, host: String, reason: ExecutorLossReason): Unit
當執行任務的執行器(executor)失敗時,會呼叫該函式進行處理。TaskSchedulerImpl呼叫該函式來通知TaskSetManagers執行失敗。
- checkSpeculatableTasks
def checkSpeculatableTasks(minTimeToSpeculation: Int): Boolean
該函式用來檢查要推測的任務,如果有,則返回true。 由TaskScheduler定期呼叫。
但注意:不能推測我們是否只有一個任務,也不能推測任務集是否是一個殭屍任務集。
- getSortedTaskSetQueue
def getSortedTaskSetQueue: ArrayBuffer[TaskSetManager]
在TaskSchedulerImpl中使用該函式來處理資源的供給(讓每個TaskSetManager知道新的執行器已經準備好執行任務)。
總結
本文分析了任務排程物件的實現合約的原理,對其各個成員進行了分析和說明。接下來會繼續分析實現該合約的兩種排程實體的實現。