常用術(shù)語:
Application:Appliction都是指用戶編寫的Spark應(yīng)用程序箱沦,其中包括一個Driver功能的代碼和分布在集群中多個節(jié)點上運行的Executor代碼
Driver:Spark中的Driver即運行上述Application的main函數(shù)并創(chuàng)建SparkContext茧痒,創(chuàng)建SparkContext的目的是為了準備Spark應(yīng)用程序的運行環(huán)境,在Spark中有SparkContext負責(zé)與ClusterManager通信掖鱼,進行資源申請、任務(wù)的分配和監(jiān)控等援制,當(dāng)Executor部分運行完畢后戏挡,Driver同時負責(zé)將SparkContext關(guān)閉,通常用SparkContext代表Driver
Executor: 某個Application運行在worker節(jié)點上的一個進程晨仑, 該進程負責(zé)運行某些Task褐墅, 并且負責(zé)將數(shù)據(jù)存到內(nèi)存或磁盤上拆檬,每個Application都有各自獨立的一批Executor, 在Spark on Yarn模式下妥凳,其進程名稱為CoarseGrainedExecutor Backend竟贯。一個CoarseGrainedExecutor Backend有且僅有一個Executor對象, 負責(zé)將Task包裝成taskRunner,并從線程池中抽取一個空閑線程運行Task逝钥, 這個每一個CoarseGrainedExecutor Backend能并行運行Task的數(shù)量取決與分配給它的cpu個數(shù)
Cluter Manager:指的是在集群上獲取資源的外部服務(wù)屑那。目前有三種類型
- Standalon : spark原生的資源管理,由Master負責(zé)資源的分配
- Apache Mesos:與hadoop MR兼容性良好的一種資源調(diào)度框架
- Hadoop Yarn: 主要是指Yarn中的ResourceManager
Worker: 集群中任何可以運行Application代碼的節(jié)點艘款,在Standalone模式中指的是通過slave文件配置的Worker節(jié)點持际,在Spark on Yarn模式下就是NodeManager節(jié)點
Task: 被送到某個Executor上的工作單元,和hadoopMR中的MapTask與ReduceTask概念一樣哗咆,是運行Application的基本單位蜘欲,多個Task組成一個Stage,而Task的調(diào)度和管理等是由TaskScheduler負責(zé)
Job: 包含多個Task組成的并行計算晌柬,往往由Spark Action觸發(fā)生成姥份, 一個Application中往往會產(chǎn)生多個Job
Stage: 每個Job會被拆分成多組Task, 作為一個TaskSet空繁, 其名稱為Stage殿衰,Stage的劃分和調(diào)度是有DAGScheduler來負責(zé)的,Stage分:非最終的Stage(Shuffle Map Stage)和最終的Stage(Result Stage)兩種盛泡,Stage的邊界就是發(fā)生shuffle的地方
DAGScheduler: 根據(jù)Job構(gòu)建基于Stage的DAG(Directed Acyclic Graph有向無環(huán)圖)闷祥,并提交Stage給TaskScheduler。 其劃分Stage的依據(jù)是RDD之間的依賴的關(guān)系找出開銷最小的調(diào)度方法傲诵,如下圖
- image
TASKSedulter: 將TaskSET提交給worker運行凯砍,每個Executor運行什么Task就是在此處分配的. TaskScheduler維護所有TaskSet,當(dāng)Executor向Driver發(fā)生心跳時拴竹,TaskScheduler會根據(jù)資源剩余情況分配相應(yīng)的Task悟衩。另外TaskScheduler還維護著所有Task的運行標簽,重試失敗的Task栓拜。下圖展示了TaskScheduler的作用
- image
在不同運行模式中任務(wù)調(diào)度器具體為:
- Spark on Standalone模式為TaskScheduler
- YARN-Client模式為YarnClientClusterScheduler
- YARN-Cluster模式為YarnClusterScheduler
- 將這些術(shù)語串起來的運行層次圖如下:
- image
- Job=多個stage座泳,Stage=多個同種task, Task分為ShuffleMapTask和ResultTask,RDD依賴分為寬依賴(Wide Dependency /Shuffle Dependency)和窄依賴(Narrow Dependency)
窄依賴:子RDD的每個分區(qū)依賴于常數(shù)個父分區(qū)(即與數(shù)據(jù)規(guī)模無關(guān))幕与,允許父分區(qū)以流水線的方式找到子分區(qū)挑势,map產(chǎn)生窄依賴
寬依賴:子RDD的每個分區(qū)依賴于所有父RDD分區(qū);類似于MR的shuffle過程啦鸣;Join產(chǎn)生寬依賴(除非父RDD被哈希分區(qū))