Spark详解(十一):Spark运行架构原理分析
1. Spark 運行架構總體分析
1.1 總體介紹
Spark應用程序的運行架構基本上由三部分組成,包括SparkContext(驅動程序)、ClusterManger(集群資源管理器)和Executor(任務執行進程)組成
- SparkContext負責與Cluster Manager通信,進行資源的分配和監控等,負責作業的執行的全生命周期管理。
- ClusterManger提供了資源的分配和管理,在不同的運行模式下,擔任的角色不同,在本地運行、SPakrStandalane模式下由Master提供,在Yarn運行模式下由Resource Mangaer擔任。
1.2 重要類介紹
TaskShceduler是重要的Spark的重要調度器之一,它負責具體任務的調度執行,而SchuedlerBackend則負責應用程序運行期間與底層資源調度系統交互。
應用程序具體運行的過程是:
下面我們介紹Spark運行架構中十分重要的兩個類:
- TaskScheduler:該類是高層調度器DAGScheduler與任務執行SchedulerBackend的橋梁。TaskScheduler是特質類,定義了任務調度相關的實現方法,TaskSchedulerImpl是其重要的子類,它實現了TaskSchedulerde所有的接口方法,而TaskScheduler的孫子類YarnScheduler和YarnClusterScheduler只是重寫其中的一兩個方法。
- SchedulerBackend:該類為特質類,子類根據不同的運行模式分為本地運行模式LoaclBackend,粗粒度運行模式的CoarseGraniedSchedulerBackend和細粒度MesosSchedulerBackend。粗粒度運行模式包括獨立運行模式(Standalane)的SparkDelploySchedulerBackend、Yarn運行模式的YarnSchedulerBackend和粗粒度CoarssMesosSchedulerBackend。
2. 獨立運行模式(Standalane)運行模式
獨立運行模式是Spark自身實現的資源調度框架,由客戶端、Master節點和Worker節點組成,其中SparkContext既可以運行在Master節點,也可以運行在本地客戶端。
Worker節點可以通過ExecutorRunner運行在當前節點上的CoarseGrainedExecutorBackend進程,每個Worker節點存在一個或者多個CoarseGrainedExecutorBackend進程,每個進程包含一個Executor對象。該對象有一個線程池,每個線程可以執行一個任務。
(1)啟動應用程序,在SparkContext啟動過程中,先初始化DAGScheduler和TaskSchedulerImpl兩個調度器,同時初始化SparkDelploySchedulerBackend,并且在內部啟動終端點DriverEndPoint和ClientEndPoint。
(2)終端點ClientEndPoint向Master注冊應用程序,Master收到注冊信息把該應用程序加入到等待應用程序隊列中,等待Master分派給該應用程序Worker。
(3)當前應用程序獲取Worker時,Master會通知worker中的終端點WorkerEndpoint創建CoarseGrainedExecutorBackend進程,在該進程中創建執行容器Executor。
(4) Executor創建完畢后發送消息而給Master和終端點DriverEndPoint,告知Executor以及創建完畢,在SparkContext成功注冊之后,等待接收從Driver終端點執行任務的信息。
(5)SparkContext分配任務給CoarseGrainedExecutorBackend進程執行,任務執行在按照一定的調度策略進行的。
(6)CoarseGrainedExecutorBackend在任務處理的過程中,把處理任務的狀態發送給SparkContext的終端點DriverEndPoint,SparkContext根據任務執行不同的結果進行處理。如果任務集處理完畢之后,則會繼續發送其他任務集。
(7)應用程序運行完畢之后,SparkContext就會進行資源回收,先銷毀在Worker的CoarseGrainedExecutorBackend進程,然后再銷毀自身。
3. YARN運行模式
Yarn是一種資源管理機制,其上面可以運行多套計算框架。Yarn 運行模式根據Driver在集群中的位置分為兩個模式,一種是Yarn-Client模式,還有一種是Yarn-Cluster模式。
3.1 Yarn 運行框架
3.2 Yarn-Client運輸模式
Yarn-Client運行模式分為以下幾個步驟:
(1)啟動應用程序,在SparkContext啟動過程中,先初始化DAGScheduler。使用反射方法初始化YarnScheduler和YarnClientSchedulerBackend。YarnClientSchedulerBackend在內部啟動DriverEndPoint和Client。
(2)ResourceManager收到請求之后,在集群中選擇一個NodeManager,為該應用程序分配一個Container,為該應用程序分配一個Container,要求這個Container中啟動應用程序的ApplicationMaster,與Yarn-Cluster有區別的是,在該Application Master不運行SparkContext,只與SparkContext進行聯系,并且進行資源的分配
(3)客戶端的SparkContext啟動完畢之后,與ApplicationMaster建立通信,向ResourceManager注冊,根據任務信息向ResourceManager申請資源(Container)。
(4)一旦ApplicationMaster申請到了資源(Container)后,便于對應的NodeManager建立通信,要求它在獲得的Container中啟動CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend會向客戶端中的SparkContext進行注冊并且申請任務集。
(5)客戶端中的SparkContext分配任務集給CoarseGrainedExecutorBackend執行,CoarseGrainedExecutorBackend運行任務并且向終端點DriverEndpoint匯報任務運行的狀態和進展,客戶端隨時掌握各個任務的運行狀態,從而可以在任務失敗的時候重新啟動任務
(6)應用程序執行完畢之后,客戶端的SparkContext向ResourceManger申請注銷并且關閉本身。
下面我們用spark-submint腳本提交Yarn-Client應用程序
bin/spark-submit --class org.apache.spark.examples.SparkPi \ --master yarn-client --num-executors 3 --driver-memory 4g \ --executor-memory 2g \ --executor-cores 1 lib\spark-examples*.jar3.3 Yarn-Cluster運行模式介紹
在Yarn-Cluster模式中,當向用戶YARN中提交一個應用程序之后,YARN將分為兩個階段運行在該應用程序中:第一個階段是把Spark的Driver作為一個ApplicationMaster在YARN集群中啟動;第二階段是由ApplicationMaster創建應用程序,然后它向ResourceManager申請資源,并且啟動Executor來運行任務集,同時監控它的整個執行過程,直到運行完成。
(1)客戶端提交應用程序時,啟動Client向YARN中提交應用程序,包括啟動Application Master的命令、提交給Application Master的程序和需要在Executor中運行的程序等。
(2)esourceManager收到請求之后,在集群中選擇一個NodeManager,為該應用程序分配一個Container,為該應用程序分配一個Container,要求這個Container中啟動應用程序的ApplicationMaster。其中ApplicationMaster進行SparkContext等初始化工作。
(3)中ApplicationMaster向ResourceManager注冊,根據任務信息向ResourceManager申請資源(Container),并且監控任務的狀態直到運行結束。
(4)一旦ApplicationMaster申請到了資源(Container)后,便于對應的NodeManager建立通信,要求它在獲得的Container中啟動CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend會向Application Master中的SparkContext進行注冊并且申請任務集。
(5)Application Master中的SparkContext分配任務集給CoarseGrainedExecutorBackend執行,CoarseGrainedExecutorBackend運行任務并且向終端點DriverEndpoint匯報任務運行的狀態和進展,客戶端隨時掌握各個任務的運行狀態,從而可以在任務失敗的時候重新啟動任務
(6)應用程序執行完畢之后,客戶端的pplication Master向ResourceManger申請注銷并且關閉本身。
下面我們用spark-submint腳本提交Yarn-Client應用程序
bin/spark-submit --class org.apache.spark.examples.SparkPi \ --master yarn-cluster --num-executors 3 --driver-memory 4g \ --executor-memory 2g \ --executor-cores 1 lib\spark-examples*.jar總結
以上是生活随笔為你收集整理的Spark详解(十一):Spark运行架构原理分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spark详解(十):SparkShuf
- 下一篇: Spark详解(十二):Spark St