前言
了解Spark架構(gòu)原理及相關任務提交流程前黄橘,我們需要先了解一下Spark中的一些角色概念塞关。
Application:用戶編寫的Spark應用程序,包含了一個Driver 功能的代碼和分布在集群中多個節(jié)點上運行的Executor代碼
Driver:運行Application的main()函數(shù)并且創(chuàng)建SparkContext(Spark應用程序的運行環(huán)境)匿醒。Driver負責和ClusterManager通信缠导,進行資源的申請、任務的分配和監(jiān)控等髓削。
Cluster Manager:集群上獲取資源的外部服務立膛,比如Standalone(由Master負責資源的分配)和Yarn(由ResourceManager負責資源的分配)
Worker:從節(jié)點宝泵,負責控制計算節(jié)點,啟動Executor或者Driver闯捎。在Standalone模式中指的就是通過Slave文件配置的Worker節(jié)點瓤鼻,在Spark on Yarn模式中指的就是NodeManager節(jié)點娱仔。
Executor:運行在Worker 節(jié)點上的進程牲迫,該進程負責運行Task,并且負責將數(shù)據(jù)存在內(nèi)存或者磁盤上筛峭。
Job:包含多個Task組成的并行計算,往往由Spark Action催生挂签,一個JOB包含多個RDD及作用于相應RDD上的各種Operation饵婆;
Stage:每個Job會被拆分很多Stage侨核,而每個Stage又包含多個Task搓译;Stage是根據(jù)寬依賴和窄依賴劃分的.
Task: 被送到某個Executor上的工作任務
一.Standalone-Client方式提交任務方式
提交命令
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í)行原理圖
執(zhí)行流程
1.Client模式提交任務后嘿般,會在客戶端啟動Driver進程
2.Driver會向Master申請啟動Application啟動的資源
3.資源申請成功怀樟,Driver端將task發(fā)送到worker端執(zhí)行
4.worker將task執(zhí)行結(jié)果返回到Driver端往堡。
缺點
client模式適用于測試調(diào)試程序虑灰。Driver進程是在客戶端啟動的颤诀,這里的客戶端就是指提交應用程序的當前節(jié)點崖叫。在Driver端可以看到task執(zhí)行的情況心傀。生產(chǎn)環(huán)境下不能使用client模式脂男,因為Driver可能會回收task執(zhí)行結(jié)果數(shù)據(jù),假設要提交100個application到集群運行汁讼,Driver每次都會在client端啟動掉缺,那么就會導致客戶端所在節(jié)點的Driver收集100個application的結(jié)果數(shù)據(jù),導致100次網(wǎng)卡流量暴增的問題筐高。
二.Standalone-Cluster方式提交任務方式
提交命令
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í)行原理圖
執(zhí)行流程
1.cluster模式提交應用程序后,會向Master請求啟動Driver.
2.Master接受請求稽屏,隨機在集群一臺節(jié)點啟動Driver進程坛增。
3.Driver啟動后為當前的應用程序申請資源收捣。
4.Driver端發(fā)送task到worker節(jié)點上執(zhí)行罢艾。
5.worker將執(zhí)行情況和執(zhí)行結(jié)果返回給Driver端。
總結(jié)
Driver進程是在集群某一臺Worker上啟動的仓蛆,在客戶端是無法查看task的執(zhí)行情況的看疙。假設要提交100個application到集群運行,每次Driver會隨機在集群中某一臺Worker上啟動能庆,那么這100次網(wǎng)卡流量暴增的問題就散布在集群上。
三.Yarn-Client方式提交任務方式
提交命令
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í)行原理圖
執(zhí)行流程
1.客戶端提交一個Application渠旁,在客戶端啟動一個Driver進程。
2.應用程序啟動后會向RS(ResourceManager)發(fā)送請求杂靶,啟動AM(ApplicationMaster)的資源吗垮。
3.RS收到請求烁登,隨機選擇一臺NM(NodeManager)啟動AM蚀之。這里的NM相當于Standalone中的Worker節(jié)點足删。
4.AM啟動后失受,會向RS請求一批container資源拂到,用于啟動Executor。
5.RS會找到一批NM返回給AM,用于啟動Executor领铐。
總結(jié)
Yarn-Client模式同樣是適用于測試绪撵,因為Driver運行在本地音诈,Driver會與yarn集群中的Executor進行大量的通信细溅,會造成客戶機網(wǎng)卡流量的大量增加。
Yarn-Client模式下ApplicationMaster的作用:
- 1.為當前的Application申請資源
- 2.給NameNode發(fā)送消息啟動Executor承疲。
注意:ApplicationMaster有l(wèi)aunchExecutor和申請資源的功能,并沒有作業(yè)調(diào)度的功能啼辣。因此進程名稱為ExecutorLauncher鸥拧,不能叫做ApplicationMaster富弦。
四.Yarn-Cluster方式提交任務方式
提交命令
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í)行原理圖
執(zhí)行流程
1.客戶機提交Application應用程序,發(fā)送請求到RS(ResourceManager),請求啟動AM(ApplicationMaster)砰蠢。
2.RS收到請求后隨機在一臺NM(NodeManager)上啟動AM(相當于Driver端)台舱。
3.AM啟動竞惋,AM發(fā)送請求到RS,請求一批container用于啟動Executor熬甫。
4.RS返回一批NM節(jié)點給AM。
5.AM連接到NM,發(fā)送請求到NM啟動Executor瞻颂。
6.Executor反向注冊到AM所在的節(jié)點的Driver。Driver發(fā)送task到Executor盖矫。
總結(jié)
Yarn-Cluster主要用于生產(chǎn)環(huán)境中辈双,因為Driver運行在Yarn集群中某一臺nodeManager中湃望,每次提交任務的Driver所在的機器都是隨機的瞳浦,不會產(chǎn)生某一臺機器網(wǎng)卡流量激增的現(xiàn)象叫潦,缺點是任務提交后不能看到日志。只能通過yarn查看日志拔妥。
Yarn-Cluster模式下ApplicationMaster的作用:
- 1.為當前的Application申請資源
- 2.給NameNode發(fā)送消息啟動Executor没龙。
- 3.任務調(diào)度硬纤。
注意:ApplicationMaster有l(wèi)aunchExecutor和申請資源的功能,相比較Yarn-Client模式下具備了作業(yè)調(diào)度的功能溪王。因此進程名稱叫做ApplicationMaster莹菱。
停止集群任務命令:yarn application -kill applicationID