private def schedule()
只有在模式是yarn-cluster提交後,才會註冊driver,因為standalone與yarn-client作用就是把集合隨機打亂
//取出workers中所有之前註冊的worker,進行過濾,必須 狀態 是alive的worker
//把worker隨機的打亂
val shuffledaliveworkers = random.shuffle(workers.toseq.filter(
_.state == workerstate.alive))
val numworkersalive = shuffledaliveworkers.size。
都會在本地啟動dirver,而不會來註冊driver,就更不可能被master來排程
所以說下面的這個for只會執行在yarn-cluster模式下提交下
比如有20cpu core,有10個worker,那麼實際會遍歷兩遍,每次迴圈,每個worker分配乙個corefor (driver <- waitingdrivers.tolist)
//將指標指向下乙個worker
curpos = (curpos + 1) % numworkersalive
}}
最後每個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延遲執行...