spark深度解析 排程演算法

2021-09-02 02:12:54 字數 1553 閱讀 5899

private def schedule()
作用就是把集合隨機打亂

//取出workers中所有之前註冊的worker,進行過濾,必須 狀態 是alive的worker

//把worker隨機的打亂

val shuffledaliveworkers = random.shuffle(workers.toseq.filter(

_.state == workerstate.alive))

val numworkersalive = shuffledaliveworkers.size。

只有在模式是yarn-cluster提交後,才會註冊driver,因為standalone與yarn-client

都會在本地啟動dirver,而不會來註冊driver,就更不可能被master來排程

所以說下面的這個for只會執行在yarn-cluster模式下提交下

for (driver <- waitingdrivers.tolist) 

//將指標指向下乙個worker

curpos = (curpos + 1) % numworkersalive

}}

比如有20cpu core,有10個worker,那麼實際會遍歷兩遍,每次迴圈,每個worker分配乙個core

最後每個worker分配了兩個core*/

//從workerk中,過濾出狀態是alive的

val usableworkers = workers.toarray.filter(_.state == workerstate.alive)

val numusable = usableworkers.length

//建立乙個空陣列,儲存了要分配的每個worker的cpu

val assigned = new array[int](numusable) // number of cores to give on each node

var pos = 0

//只要有還有要分配的cpu沒有分配完就while

while (toassign > 0)

//指定指向下乙個worker

pos = (pos + 1) % numusable

}// now that we've decided how many cores to give on each node, let's actually give them

for (pos <- 0 until numusable) }}

}

//遍歷worker,並且狀態是alive,還有空閒的cpu的worker

for (worker <- workers if worker.coresfree > 0 && worker.state == workerstate.alive)

}

其中裡面有乙個非常重要的方法:

def launchexecutor(worker: workerinfo, exec: executordesc)

Spark排程解析

目錄 spark排程解析 1.相關術語 2.作業 階段 任務之間的關係 如何劃分作業 job 如何劃分階段 stage 如何劃分任務 task 總結 3.spark執行流程 參考文獻 driver通常用sparkcontext代表driver cluster manager 指的是在集群上獲取資源的...

spark學習 Task排程演算法

task排程演算法 對每個task,依據本地化演算法從最好的一種本地化級別開始遍歷,直到task被分配到executor執行。1.process local,程序本地化,rdd的partition和task進入乙個executor內,執行速度快。2.node local,節點本地化,rdd的part...

Spark執行時程式排程解析

1,spark應用程式會在乙個物理節點上有驅動程式 driver 2,驅動程式 driver 會分發每個tasks到worker節點 3,worker節點就會返回result到dirver節點 1,分布式檔案系統 file system 載入資料集 rdd 2,transformations延遲執行...