一籍胯、YARN是集群的資源管理系統(tǒng)
1、ResourceManager:負責整個集群的資源管理和分配声离。
2芒炼、ApplicationMaster:YARN中每個Application對應一個AM進程,負責與RM協(xié)商獲取資源术徊,獲取資源后告訴NodeManager為其分配并啟動Container本刽。
3、NodeManager:每個節(jié)點的資源和任務管理器赠涮,負責啟動/停止Container子寓,并監(jiān)視資源使用情況。
4笋除、Container:YARN中的抽象資源斜友。
二、 SPARK的概念
1垃它、Driver:和ClusterManager通信鲜屏,進行資源申請、任務分配并監(jiān)督其運行狀況等国拇。運行程序的main方法洛史,創(chuàng)建spark context對象。具體的:1)driver是作業(yè)的主進程酱吝,具有main函數(shù)也殖,并且有SparkContext的實例,是程序的人口點务热;2)功能:負責向集群申請資源忆嗜,向master注冊信息己儒,負責了作業(yè)的調度,捆毫,負責作業(yè)的解析闪湾、生成Stage并調度Task到Executor上。包括DAGScheduler冻璃,TaskScheduler响谓。
2、ClusterManager:這里指YARN省艳。
3、DAGScheduler:把spark作業(yè)轉換成Stage的DAG圖嫁审。
4跋炕、TaskScheduler:把Task分配給具體的Executor。
5律适、一個application對應一個sparkcontext辐烂,app中存在多個job,每個job在不同partition上的執(zhí)行稱為task捂贿。
6纠修、client:用戶提交程序的入口。
7厂僧、worker: worker就類似于包工頭扣草。主要功能:管理當前節(jié)點內存,CPU的使用狀況颜屠,接收master分配過來的資源指令辰妙,通過ExecutorRunner啟動程序分配任務。注意:1)worker不會匯報當前信息給master甫窟,worker心跳給master主要只有workid密浑,它不會發(fā)送資源信息以心跳的方式給mater,master分配的時候就知道work粗井,只有出現(xiàn)故障的時候才會發(fā)送資源尔破。2)worker不會運行代碼,具體運行的是Executor是可以運行具體appliaction寫的業(yè)務邏輯代碼浇衬,操作代碼的節(jié)點懒构,它不會運行程序的代碼的。
三径玖、 SPARK on YARN
1. yarn on cluster
(1)ResourceManager接到請求后在集群中選擇一個NodeManager分配Container痴脾,并在Container中啟動ApplicationMaster進程;
(2)在ApplicationMaster進程中初始化sparkContext梳星;
(3)ApplicationMaster向ResourceManager申請到Container后赞赖,通知NodeManager在獲得的Container中啟動excutor進程滚朵;
(4)sparkContext分配Task給excutor,excutor發(fā)送運行狀態(tài)給ApplicationMaster前域。
2. yarn on client
(1)ResourceManager接到請求后在集群中選擇一個NodeManager分配Container辕近,并在Container中啟動ApplicationMaster進程;
(2)driver進程運行在client中匿垄,并初始化sparkContext移宅;
(3)sparkContext初始化完后與ApplicationMaster通訊,通過ApplicationMaster向ResourceManager申請Container椿疗,ApplicationMaster通知NodeManager在獲得的Container中啟動excutor進程漏峰;
(4)sparkContext分配Task給excutor,excutor發(fā)送運行狀態(tài)給driver届榄。
3. 區(qū)別
- 它們的區(qū)別就是ApplicationMaster的區(qū)別:yarn-cluster中ApplicationMaster不僅負責申請資源浅乔,并負責監(jiān)控Task的運行狀況,因此可以關掉client铝条;而yarn-client中ApplicationMaster僅負責申請資源靖苇,由client中的driver來監(jiān)控調度Task的運行,因此不能關掉client班缰。
- client適合調試贤壁,dirver運行在客戶端; cluster適合生產,driver運行在集群子節(jié)點埠忘,具有容錯功能
四脾拆、 job stage task
- job : A job is triggered by an action, like count() or saveAsTextFile(). Click on a job to see information about the stages of tasks inside it. 所謂一個 job,就是由一個 rdd 的 action 觸發(fā)的動作给梅,可以簡單的理解為假丧,當你需要執(zhí)行一個 rdd 的 action 的時候,會生成一個 job动羽。
- stage : stage 是一個 job 的組成單位包帚,就是說,一個 job 會被切分成 1 個或 1 個以上的 stage运吓,然后各個 stage 會按照執(zhí)行順序依次執(zhí)行渴邦。由job->stage,其劃分原則是從寬依賴分隔拘哨。因為從寬依賴谋梭,所以子RDD的partition會依賴多個父RDD的partition,有些可能就沒有準備好倦青,所以進行劃分處理瓮床。
- task : A unit of work within a stage, corresponding to one RDD partition。即 stage 下的一個任務執(zhí)行單元,一般來說隘庄,一個 rdd 有多少個 partition踢步,就會有多少個 task,因為每一個 task 只是處理一個 partition 上的數(shù)據(jù)丑掺。
- spark作業(yè)提交流程:
Spark任務會根據(jù)RDD之間的依賴關系获印,形成一個DAG有向無環(huán)圖,DAG會提交給DAGScheduler街州,DAGScheduler會把DAG劃分相互依賴的多個stage兼丰,劃分stage的依據(jù)就是RDD之間的寬窄依賴。遇到寬依賴就劃分stage,每個stage包含一個或多個task任務唆缴。然后將這些task以taskSet的形式提交給TaskScheduler運行鳍征。 -
stage切割規(guī)則:從后往前,遇到寬依賴就切割stage
- spark工作機制:
答:用戶在client端提交作業(yè)后面徽,會由Driver運行main方法并創(chuàng)建spark context上下文蟆技。
執(zhí)行add算子,形成dag圖輸入dagscheduler斗忌,按照add之間的依賴關系劃分stage輸入task scheduler。 task scheduler會將stage劃分為task set分發(fā)到各個節(jié)點的executor中執(zhí)行旺聚。
五织阳、 RDD之間的寬依賴、窄依賴
- 窄依賴:表示父親 RDD 的一個分區(qū)最多被子 RDD 一個分區(qū)所依賴砰粹。有shuffle產生唧躲,父RDD的一個分區(qū)的數(shù)據(jù)去到子RDD的不同分區(qū)里
例如:map filter union - 寬依賴:表示父親 RDD 的一個分區(qū)可以被子 RDD 的多個子分區(qū)所依賴。沒有shuffle產生碱璃,父的一個分區(qū)數(shù)據(jù)到了子RDD的一個分區(qū)
例如:groupByKey group sort