SparkContext源码分析
SparkContext源碼分析
粗略的說明一下SparkContext源碼! createTaskScheduler()針對不同的提交模式,執(zhí)行不同的方法(local,standalone、yanr等)standalone模式===》》創(chuàng)建一個TaskSchedulerImpl
1、???????底層通過操作SchedulerBackend,針對不同種類的cluster(standalone、yarn。mesoso(亞馬遜))調(diào)度task
2、???????他也可以通過一個LoaclBackend,并且將isLocal設(shè)置為true,來在本地模式下工作
3、???????他負(fù)責(zé)處理一下通用的邏輯,比如說決定多個job的調(diào)度順序(FIFO),啟動推測任務(wù)執(zhí)行
4、???????客戶端首先應(yīng)該調(diào)用它的initialize()方法和start()方法,然后通過runTasks()方法提交tasksets
創(chuàng)建SparkDeploySchedulerBackend()
initializer方法中創(chuàng)建一個Pool調(diào)度池,FIFO、FAIR
taskScher。start()方法=====》調(diào)用了一下SparkDeploySchedulerBackend的start方法
此時:val AppDesc = newApplicationDescription(sc.appName、maxCores,sc.executorMemory,command,appUIaddress)
創(chuàng)建一個ApplicationDescription,非常重要!它代表了當(dāng)前執(zhí)行的Application的一下情況,包括Application最大需要多少CPU core? 每個slave上需要多大內(nèi)存。
創(chuàng)建APPclient(Application與spark之間通信)
一個借口。
它負(fù)責(zé)接收一個spark master的url,以及一個ApplicationDescription,和一個集群事件的監(jiān)聽器,以及各種事件發(fā)生時,監(jiān)聽器的回調(diào)函數(shù)!
start()方法,創(chuàng)建一個clientActor
調(diào)用registerWithMaster()里面調(diào)用tryRegisterAllMasters(),里面去連接所有的master。
DAGScheduler:實現(xiàn)了面向stage的調(diào)度機制的高層次的調(diào)度層,他會為每一個job計算一個stage的DAG(有向無環(huán)圖),追蹤RDD和stage的輸出是否被物化(寫入磁盤或者內(nèi)存等地方),并且尋找一個最少消耗(最優(yōu)、最小)調(diào)度機制來運行job,他會將stage作為tasksets提交到底層的TaskScheduler上,來在集群上運行他們(task)。
除了處理stage的DAG,還負(fù)責(zé)決定運行每個task的最佳位置,基于當(dāng)前的緩存狀態(tài),將這些最佳位置提交給底層的TaskSchedulerImpl,此外,他會處理由于shuffle輸出文件丟失導(dǎo)致的失敗,在這種情況下,舊的stage可能會被重新提交,一個stage內(nèi)部的失敗,如果不是由于shuffle文件丟失導(dǎo)致的,會被TaskScheduler處理,他會多次重復(fù)每一個task,知道最后實在不行,才會去取消整個stage。
SparkUI:jetty工具類。
總結(jié)
以上是生活随笔為你收集整理的SparkContext源码分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spark之Master主备切换机制原理
- 下一篇: ug8.0需要什么配置?