一、架構圖
組件圖:
架構圖:
二、組件介紹
1.Driver
driver是一個進程,我們編寫的spark程序運行在driver上,由dirver進程執行,driver是作業的主進程,具有main函數,是程序的入口點,driver進程啓動後,向master發送請求,進行註冊,申請資源,在後面的executor啓動後,會向dirver進行反註冊,dirver註冊了executor後,正式執行spark程序,讀取數據源,創建rdd或dataframe,生成stage,提交task到executor它會運行客戶端寫好的main方法,並且它會創建sparkcontext對象,該對象是所有spark程序的執行入口。
sparkcontext:
- SparkContext:整個應用的上下文,控制應用的生命週期。
- RDD:Spark的基礎計算單元,一組RDD可形成執行的有向無環圖RDD Graph。
- DAG Scheduler:根據作業(task)構建基於Stage的DAG,並提交Stage給TaskScheduler。
- TaskScheduler:將任務(task)分發給Executor執行。
- SparkEnv:線程級別的上下文, 存儲運行時的重要組件的引用。
2.Application
它就是一個應用程序,它包括了Driver端的代碼邏輯和任務在執行的時候需要的資源信息。
3.clusterManager :它既是給當前任務提供計算資源的外部服務
standAlone:
它是spark自帶的集羣模式,整個任務的資源分配由master負責
Yarn:
Spark程序可以提交到yarn中去運行,整個任務的資源分配由ResourceManager負責。
Mesos:
就是一個apache開源的類似於yarn的資源調度平臺
4.Master
是個進程,它是整個spark集羣的老大,它負責資源的分配。
5.Worker
是個進程,它是整個spark集羣的小弟,主要負責兩個:一個是用自己的內存存儲RDD的某個或某些partition,另一個是啓動其他進程和線程,對RDD上的partition進行處理和計算
6.Excutor
是一個進程,它會在worker節點上啓動對應的executor進程
7.task
是一個線程,具體的spark任務是在Task上運行的,它是以線程的方式運行在worker節點的executor進程中。
三、詳細流程介紹
流程圖:
1、Driver進程啓動之後,會進行一些初始化的操作,在這個過程中,會發送請求到master
2、Master,接收到Driver的註冊之後,發送請求給Worker,進行資源的調度和分配,也就是Executor的分配
3、Worker接收到master的請求,啓動Executor
4、Executor啓動之後,會向Driver進行反註冊
5、Driver註冊了Executor之後,正式開始執行Spark程序,首先讀取數據源,創建RDD
6、HDFS文件被讀取到多個Worker節點,形成RDD
7、在worker上生成RDD之後,Driver會根據我們對RDD定義的操作,提交相應數量的Task到Executor上