前面三章我們已經(jīng)嘗試剖析講過SparkContext的基本的原理,其實涉及到了Driver對Master的注冊饿肺,本節(jié)就關(guān)于Master注冊機制進行更詳細的剖析蒋困。
我們知道Spark Standalone模式是一個主從架構(gòu),主節(jié)點就是Master,從節(jié)點是Worker(Salver),所以主節(jié)點是管理節(jié)點唬格,類似Hadoop的Namenode,存在單點問題,這個在上一節(jié)已經(jīng)詳細分析了主備切換原理颜说。 本節(jié)對Master注冊包括Driver, Applicaiton,Worker
一:Driver向 Master注冊信息
前幾節(jié)講過用spark-submit提交Application時购岗,SparkContext初使化,首先Driver程序會向Master注冊信息门粪。
1:把Driver信息加入Master節(jié)點的內(nèi)存緩存區(qū)喊积,其實這就是一個集合(HashMap)
2:把Driver信息加入等待調(diào)度隊列中(關(guān)于調(diào)度算法我們后面會深入分析),其實就是一個ArrayList玄妈,
當然在Scala中是一個ArrayBuffer
3:用持久化引摯(關(guān)于持久化引摯的具體類型我們在第四節(jié)介紹過)將Driver信息持久化
4:調(diào)用scheduler()方法(這個一個Spark核心中的核心資源調(diào)度方法乾吻,
后面我們會大量結(jié)合源代碼一行一行分析)
二:Application向 Master注冊信息
SparkContext初使化后會成生非常重要的兩個TaskScheduler,DAGSchdeuler髓梅,其實TaskScheduler中的SparkDeplaySchedulerBackend對象對封裝我們Application向Master注冊
1:把Application信息加入Master節(jié)點的內(nèi)存緩存區(qū),其實這就是一個集合(HashMap)
2:把Application信息加入等待調(diào)度隊列中(關(guān)于調(diào)度算法我們后面會深入分析)绎签,其實就是一個ArrayList枯饿,
當然在Scala中是一個ArrayBuffer
3:用持久化引摯將Application信息持久化
4:調(diào)用scheduler()方法(這個一個Spark核心中的核心資源調(diào)度方法,
后面我們會大量結(jié)合源代碼一行一行分析)
二:Worker向 Master信息,Worker在啟動后主動向Master匯報注冊
1:將Workerk中的狀態(tài)是DEAD的Worker過濾掉(什么情況下會是DEAD狀態(tài)诡必,
前面我們已經(jīng)詳細剖析過奢方,這里就不多介紹了),
對于狀態(tài)是UNKNOW的Worker,清除掉舊的Worker信息爸舒,替換新的Worker信息
2:把Worker信息加入Master節(jié)點的內(nèi)存緩存區(qū)蟋字,其實這就是一個集合(HashMap)
3:用持久化引摯將Application信息持久化
4:調(diào)用scheduler()方法(這個一個Spark核心中的核心資源調(diào)度方法,
后面我們會大量結(jié)合源代碼一行一行分析)