spark運行架構(gòu):
1、Driver : spark應用的任務控制節(jié)點
2、Executor : spark應用的任務的執(zhí)行進程
3、Cluster Manager : spark任務的資源管理器
如圖:

spark運行架構(gòu)包括Cluster Manager、Driver和Executor;
Executor內(nèi)有線程池,通過多線程執(zhí)行相關(guān)任務;
Task的中間結(jié)果直接寫入到內(nèi)存,有效減少IO開銷。
名詞解釋:
1、Application:應用,即我們提交到Spark的執(zhí)行程序
2、Job:Spark中對RDD進行Action操作所產(chǎn)生的RDD處理流程
3、Stage:階段,一個Job會切分成多過Stage,各個Stage之間按照順序執(zhí)行

一個Spark Application包含一個Driver和多個job
一個job包含多個Stage,一個Stage又包含多個Task
4、SparkContext:整個應用的上下文,控制應用的生命周期
5、RDD:彈性分布式數(shù)據(jù)集(Resilient Distributed Dataset)
6、DAG:是Directed Acyclic Graph(有向無環(huán)圖)的簡稱,反映RDD之間的依賴關(guān)系

1、提交應用后,Driver會創(chuàng)建SparkContext實例,申請資源
2、ClusterManager分配資源,啟動Executor進程,Executor向Dirver注冊并申請任務
3、SparkContext生成DAG圖通過DAGScheduler解析,生產(chǎn)多個Stage并通過TaskScheduler分配到各個分配給Executor執(zhí)行
過程:
當一個spark任務被提交的時候,首先要為這個應用構(gòu)建基本的運行環(huán)境,即有任務的控制節(jié)點Driver去創(chuàng)建一個應用的上下文sparkCentext, 并且由sparkCentext負責與Cluster Manager 進行注冊申請資源。這里呢也就是我們的第一個步,資源管理器為Executor分配資源,并啟動Executor進程。Executor與資源管理器保持心跳鏈接,同時向Dirver申請任務,sparkCentext根據(jù)RDD的依賴關(guān)系構(gòu)建出DAG圖,將DAG圖交給DAG的調(diào)度器進行解析,最終將DAG分解成多個Stage,Stage就是一個任務集,最終將一個一個的任務集交個底層的任務調(diào)度器進行處理, 任務調(diào)度器將任務分發(fā)給Executor運行,任務在Executor上運行將結(jié)果反饋給Driver,運行完畢之后把數(shù)據(jù)進行寫入,并且釋放掉所有占用的資源。
執(zhí)行特點:
1、Job的執(zhí)行過程與資源管理器無關(guān),資源管理器只分配資源
2、Executor含有線程池,以多線程的方式提高任務的執(zhí)行效率
3、每個Task產(chǎn)生的結(jié)果會放入內(nèi)存,避免了大量的IO開銷
1.Application:基于spark的用戶程序,包含了一個driver program 和集群中多個 executor
2.Driver Program:運行application的main()函數(shù)并自動創(chuàng)建SparkContext。通常
SparkContext 代表driver program
3.Executor:為某個Application運行在worker node 上的一個進程。該進程負責運行task并負責將數(shù)據(jù)存儲在內(nèi)存或者硬盤上,每個application 都有自己獨立的 executors
4.Cluster Mannager:在集群上獲得資源的外部服務(spark standalon,mesos,yarm)
5.Worker Node:集群中任何可運行application 代碼的節(jié)點
6.RDD:spark 的基本運算單元,通過scala集合轉(zhuǎn)化,讀取數(shù)據(jù)集生成或者由其他RDD進過算子操作得到
7.Job:可以被拆分成task并行計算的單元,一般為spark action 觸發(fā)的一次執(zhí)行作業(yè)
8.Stage:每個job會被拆分成很多組task,每組任務被稱為stage,也可稱TaskSet,該屬于經(jīng)常在日志中看到
9.task:被送到executor上執(zhí)行的工作單元