Spark的不同ClusterManger提交任務(wù)的執(zhí)行流程

前言

了解Spark架構(gòu)原理及相關(guān)任務(wù)提交流程前,我們需要先了解一下Spark中的一些角色概念。

  • Application:用戶編寫的Spark應(yīng)用程序,包含了一個(gè)Driver 功能的代碼和分布在集群中多個(gè)節(jié)點(diǎn)上運(yùn)行的Executor代碼

  • Driver:運(yùn)行Application的main()函數(shù)并且創(chuàng)建SparkContext(Spark應(yīng)用程序的運(yùn)行環(huán)境)。Driver負(fù)責(zé)和ClusterManager通信,進(jìn)行資源的申請(qǐng)、任務(wù)的分配和監(jiān)控等。

  • Cluster Manager:集群上獲取資源的外部服務(wù),比如Standalone(由Master負(fù)責(zé)資源的分配)和Yarn(由ResourceManager負(fù)責(zé)資源的分配)

  • Worker:從節(jié)點(diǎn),負(fù)責(zé)控制計(jì)算節(jié)點(diǎn),啟動(dòng)Executor或者Driver。在Standalone模式中指的就是通過Slave文件配置的Worker節(jié)點(diǎn),在Spark on Yarn模式中指的就是NodeManager節(jié)點(diǎn)。

  • Executor:運(yùn)行在Worker 節(jié)點(diǎn)上的進(jìn)程,該進(jìn)程負(fù)責(zé)運(yùn)行Task,并且負(fù)責(zé)將數(shù)據(jù)存在內(nèi)存或者磁盤上。

  • Job:包含多個(gè)Task組成的并行計(jì)算,往往由Spark Action催生,一個(gè)JOB包含多個(gè)RDD及作用于相應(yīng)RDD上的各種Operation;

  • Stage:每個(gè)Job會(huì)被拆分很多Stage,而每個(gè)Stage又包含多個(gè)Task;Stage是根據(jù)寬依賴和窄依賴劃分的.

  • Task: 被送到某個(gè)Executor上的工作任務(wù)

一.Standalone-Client方式提交任務(wù)方式

提交命令
spark-submit  --master spark://node001:7077,node002:7077 --deploy-mode client --class org.apache.spark.examples.SparkPi ../examples/jars/spark examples_2.11-2.3.1.jar  10000

執(zhí)行原理圖
standalone-client模式
執(zhí)行流程
  • 1.Client模式提交任務(wù)后,會(huì)在客戶端啟動(dòng)Driver進(jìn)程

  • 2.Driver會(huì)向Master申請(qǐng)啟動(dòng)Application啟動(dòng)的資源

  • 3.資源申請(qǐng)成功,Driver端將task發(fā)送到worker端執(zhí)行

  • 4.worker將task執(zhí)行結(jié)果返回到Driver端。

缺點(diǎn)

client模式適用于測(cè)試調(diào)試程序。Driver進(jìn)程是在客戶端啟動(dòng)的,這里的客戶端就是指提交應(yīng)用程序的當(dāng)前節(jié)點(diǎn)。在Driver端可以看到task執(zhí)行的情況。生產(chǎn)環(huán)境下不能使用client模式,因?yàn)镈river可能會(huì)回收task執(zhí)行結(jié)果數(shù)據(jù),假設(shè)要提交100個(gè)application到集群運(yùn)行,Driver每次都會(huì)在client端啟動(dòng),那么就會(huì)導(dǎo)致客戶端所在節(jié)點(diǎn)的Driver收集100個(gè)application的結(jié)果數(shù)據(jù),導(dǎo)致100次網(wǎng)卡流量暴增的問題。

二.Standalone-Cluster方式提交任務(wù)方式

提交命令
spark-submit  --master spark://node001:7077,node002:7077 --deploy-mode cluster --class org.apache.spark.examples.SparkPi ../examples/jars/spark examples_2.11-2.3.1.jar  10000

執(zhí)行原理圖
standalone-cluster模式
執(zhí)行流程
  • 1.cluster模式提交應(yīng)用程序后,會(huì)向Master請(qǐng)求啟動(dòng)Driver.

  • 2.Master接受請(qǐng)求,隨機(jī)在集群一臺(tái)節(jié)點(diǎn)啟動(dòng)Driver進(jìn)程。

  • 3.Driver啟動(dòng)后為當(dāng)前的應(yīng)用程序申請(qǐng)資源。

  • 4.Driver端發(fā)送task到worker節(jié)點(diǎn)上執(zhí)行。

  • 5.worker將執(zhí)行情況和執(zhí)行結(jié)果返回給Driver端。

總結(jié)

Driver進(jìn)程是在集群某一臺(tái)Worker上啟動(dòng)的,在客戶端是無法查看task的執(zhí)行情況的。假設(shè)要提交100個(gè)application到集群運(yùn)行,每次Driver會(huì)隨機(jī)在集群中某一臺(tái)Worker上啟動(dòng),那么這100次網(wǎng)卡流量暴增的問題就散布在集群上。

三.Yarn-Client方式提交任務(wù)方式

提交命令
spark-submit  --master yarn --deploy-mode client --class org.apache.spark.examples.SparkPi ../examples/jars/spark examples_2.11-2.3.1.jar  10000
執(zhí)行原理圖
yarn-client模式
執(zhí)行流程
  • 1.客戶端提交一個(gè)Application,在客戶端啟動(dòng)一個(gè)Driver進(jìn)程。

  • 2.應(yīng)用程序啟動(dòng)后會(huì)向RS(ResourceManager)發(fā)送請(qǐng)求,啟動(dòng)AM(ApplicationMaster)的資源。

  • 3.RS收到請(qǐng)求,隨機(jī)選擇一臺(tái)NM(NodeManager)啟動(dòng)AM。這里的NM相當(dāng)于Standalone中的Worker節(jié)點(diǎn)。

  • 4.AM啟動(dòng)后,會(huì)向RS請(qǐng)求一批container資源,用于啟動(dòng)Executor。

  • 5.RS會(huì)找到一批NM返回給AM,用于啟動(dòng)Executor。

總結(jié)

Yarn-Client模式同樣是適用于測(cè)試,因?yàn)镈river運(yùn)行在本地,Driver會(huì)與yarn集群中的Executor進(jìn)行大量的通信,會(huì)造成客戶機(jī)網(wǎng)卡流量的大量增加。

Yarn-Client模式下ApplicationMaster的作用:

  • 1.為當(dāng)前的Application申請(qǐng)資源
  • 2.給NameNode發(fā)送消息啟動(dòng)Executor。
    注意:ApplicationMaster有l(wèi)aunchExecutor和申請(qǐng)資源的功能,并沒有作業(yè)調(diào)度的功能。因此進(jìn)程名稱為ExecutorLauncher,不能叫做ApplicationMaster。

四.Yarn-Cluster方式提交任務(wù)方式

提交命令
spark-submit  --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi ../examples/jars/spark examples_2.11-2.3.1.jar  10000

執(zhí)行原理圖
yarn-cluster模式
執(zhí)行流程
  • 1.客戶機(jī)提交Application應(yīng)用程序,發(fā)送請(qǐng)求到RS(ResourceManager),請(qǐng)求啟動(dòng)AM(ApplicationMaster)。

  • 2.RS收到請(qǐng)求后隨機(jī)在一臺(tái)NM(NodeManager)上啟動(dòng)AM(相當(dāng)于Driver端)。

  • 3.AM啟動(dòng),AM發(fā)送請(qǐng)求到RS,請(qǐng)求一批container用于啟動(dòng)Executor。

  • 4.RS返回一批NM節(jié)點(diǎn)給AM。

  • 5.AM連接到NM,發(fā)送請(qǐng)求到NM啟動(dòng)Executor。

  • 6.Executor反向注冊(cè)到AM所在的節(jié)點(diǎn)的Driver。Driver發(fā)送task到Executor。

總結(jié)

Yarn-Cluster主要用于生產(chǎn)環(huán)境中,因?yàn)镈river運(yùn)行在Yarn集群中某一臺(tái)nodeManager中,每次提交任務(wù)的Driver所在的機(jī)器都是隨機(jī)的,不會(huì)產(chǎn)生某一臺(tái)機(jī)器網(wǎng)卡流量激增的現(xiàn)象,缺點(diǎn)是任務(wù)提交后不能看到日志。只能通過yarn查看日志。

Yarn-Cluster模式下ApplicationMaster的作用:

  • 1.為當(dāng)前的Application申請(qǐng)資源
  • 2.給NameNode發(fā)送消息啟動(dòng)Executor。
  • 3.任務(wù)調(diào)度。
    注意:ApplicationMaster有l(wèi)aunchExecutor和申請(qǐng)資源的功能,相比較Yarn-Client模式下具備了作業(yè)調(diào)度的功能。因此進(jìn)程名稱叫做ApplicationMaster。

停止集群任務(wù)命令:yarn application -kill applicationID

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容