ResourceManager:是集群所有應(yīng)用程序的資源管理器埃脏,能夠管理集群的計算資源并為每個Application分配,它是一個純粹的調(diào)度器东羹。
NodeManager:是每一臺slave機器的代理,執(zhí)行應(yīng)用程序赖捌,并監(jiān)控應(yīng)用程序的資源使用情況案疲。?
Application Master:每一個應(yīng)用程序都會有一個Application Master封恰,它的主要職責是向RM申請資源、在每個NodeManager上啟動executors褐啡、監(jiān)控和跟蹤應(yīng)用程序的進程等诺舔。
執(zhí)行過程:?
(1)客戶端提交Application到RM,這個過程做的工作有判斷集群資源是否滿足需求备畦、讀取配置文件低飒、設(shè)置環(huán)境變量、設(shè)置Application名字等等懂盐;?
(2)RM在某一臺NodeManager上啟動Application Master逸嘀,AM所在的機器是YARN分配的,事先是不知道的允粤;?
(3)AM初始化SparkContext,開始驅(qū)動程序翼岁,這個NodeManager便是Driver类垫;?
(4)AM向ResourceManager申請資源,并在每臺NodeManager上啟動相應(yīng)的executors琅坡;?
(5)初始化后的SparkContext中的通信模塊可以通過AKKA與NodeManager上的容器進行通信悉患。?
比以前的更多的理解:?
(1)Application Master所在的NodeManager是Yarn隨機分配的,不是在主節(jié)點上榆俺,
(2)AM是Yarn啟動的第一個容器售躁;?
(3)AM所在的NodeManager就是平常說的Driver端,因為這個AM啟動了SparkContext茴晋,之前實驗室說的“誰初始化的SparkContext誰就是Driver端”一直理解錯了陪捷,以為這句話是相對于機器說的,但其實是相對于Cluster和Client的集群模式來說的(不知道其他模式Mesos诺擅、standalone是不是也是這樣)市袖。?
(4)在Application提交到RM上之后,Client就可以關(guān)閉了烁涌,集群會繼續(xù)運行提交的程序苍碟,在實際使用時,有時候會看到這樣一種現(xiàn)象撮执,關(guān)閉Client會導(dǎo)致程序終止微峰,其實這個Application還沒有提交上去,關(guān)閉Client打斷了提交的過程抒钱,Application當然不會
1 Yarn-Client
(1)Client Application會初始化SparkContext蜓肆,這是Driver端颜凯;?
(2)提交Application到RM;?
(3)應(yīng)該是在RM所在的機器上啟動AM(症杏?不確定)装获;
(4)AM向RM申請資源,并啟動NodeManager上的Executors厉颤;?
(5)Executors與SparkContext初始化后的通信模塊保持通信穴豫,因為是與Client端通信,所以Client不能關(guān)閉逼友。
YARN-Cluster和YARN-Client的區(qū)別
(1)SparkContext初始化不同精肃,這也導(dǎo)致了Driver所在位置的不同,YarnCluster的Driver是在集群的某一臺NM上帜乞,但是Yarn-Client就是在RM在機器上司抱;?
(2)而Driver會和Executors進行通信,這也導(dǎo)致了Yarn_cluster在提交App之后可以關(guān)閉Client黎烈,而Yarn-Client不可以习柠;?
(3)最后再來說應(yīng)用場景,Yarn-Cluster適合生產(chǎn)環(huán)境照棋,Yarn-Client適合交互和調(diào)試资溃。