轉(zhuǎn)自:Spark下Yarn-Cluster和Yarn-Client的區(qū)別
0 首先注意的概念
ResourceManager:是集群所有應(yīng)用程序的資源管理器忧换,能夠管理集群的計算資源并為每個Application分配,它是一個純粹的調(diào)度器。?
NodeManager:是每一臺slave機器的代理腹暖,執(zhí)行應(yīng)用程序抢呆,并監(jiān)控應(yīng)用程序的資源使用情況。?
Application Master:每一個應(yīng)用程序都會有一個Application Master刹缝,它的主要職責(zé)是向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é)點上竟终,下圖是實驗室集群上跑得一個Spark程序蝠猬,tseg0是主節(jié)點,tseg1~tseg4是workers统捶,IP10.103.240.29指的是tseg3:?
(2)在上圖還可以看出榆芦,executor的容器和AM容器是可以共存的,它們的封裝都是容器喘鸟;?
(3)AM是Yarn啟動的第一個容器匆绣;?
(4)AM所在的NodeManager就是平常說的Driver端,因為這個AM啟動了SparkContext什黑,之前實驗室說的“誰初始化的SparkContext誰就是Driver端”一直理解錯了崎淳,以為這句話是相對于機器說的,但其實是相對于Cluster和Client的集群模式來說的(不知道其他模式Mesos愕把、standalone是不是也是這樣)拣凹。?
(5)在Application提交到RM上之后,Client就可以關(guān)閉了恨豁,集群會繼續(xù)運行提交的程序嚣镜,在實際使用時,有時候會看到這樣一種現(xiàn)象圣絮,關(guān)閉Client會導(dǎo)致程序終止祈惶,其實這個Application還沒有提交上去,關(guān)閉Client打斷了提交的過程,Application當(dāng)然不會運行捧请。
(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)試。
之前實驗室配過Hadoop多用戶缭召,最近因為培訓(xùn)Spark栈顷,又得在這個基礎(chǔ)上再能夠運行Spark。做的工作很簡單恼琼,就是把Spark以及Spark依賴的環(huán)境scp過去妨蛹,然后再改一下相應(yīng)的配置就可以了。猜想的不同用戶運行Spark On Yarn Cluster如下圖所示晴竞,無非就是多增加了一個用戶Client,因為ResourceManager是唯一的狠半,所以不同用戶CLient提交的Spark Application在集群上運行都是一樣的噩死。?
《Spark技術(shù)內(nèi)幕-深入解析Spark內(nèi)核、架構(gòu)設(shè)計與實現(xiàn)原理》