spark核心架構剖析--Application執行過程
以standalone模式(基於spark的Master—Worker)解析spark核心架構,先羅列spark核心中的幾個概念再詳解程式的執行流程。
一、常用名詞
1、Application
2、spark-submit
3、Driver
4、SparkContext
5、Master
6、Worker
7、Executor
8、Job
9、DAGScheduler
10、TaskScheduler
11、ShuffleMapTask and ResultTask
二、架構詳解
1、在客戶端機器上用spark-submit來提交我們的程式,以standload模式來提交作業
2、spark會通過反射的方式,建立和構造一個DriverActor程序(Driver程序的作用是執行我們的Application,就是我們的程式碼)
3、從程式碼中可以看出,每次都是先構造SparkConf,在構造SparkContext或SparkSession
4、sparkContext在初始化時,做的最重要兩件事就是構造DAGScheduler和TaskScheduler(它有自己的後臺程序)
5、TaskSchedule實際上,負責通過後臺程序去連線Master,向Master註冊Application
6、Master接收到Application註冊請求後,會使用自己的資源排程演算法,在spark叢集的worker上,為這個Application啟動多個Executor
7、Master會連線Worker,通知worker為Application啟動一個或多個Executor(程序)
8、Executor啟動後,第一件事情是到反向註冊到TaskScheduler上,這樣TaskScheduler就知道服務於自己的Application的Executor有哪些
9、所有的Executor註冊到TaskScheduler後,Driver就完成了sparkContext或sparkSession的初始化,
10、繼續執行程式碼 ,每執行到一個Action就會建立一個job
11、job會被提交給DAGScheduler,DAGScheduler會呼叫stage劃分演算法,將job劃分為多個stage,每個stage建立一個stageSet
12、DAGScheduler會把stageSet給到TaskScheduler,TaskScheduler會把每個TaskSet裡每個task提交到executor上執行(task分配演算法
13、executor中有個重要的元件--執行緒池。Executor每接收到一個task,都會用TaskRunner來封裝task,然後從執行緒池裡取出一個執行緒來執行這個task
14、TaskRunner的作用是將我們編寫的程式碼,也就是要執行的運算元和函式,拷貝、反序列化,然後執行task
15、Task有兩種:ShuffleMapTask和ResultTask,只有最後一個stage是ResultTask,其他都是ShuffleMapTask
16、所以,最後整個spark應用程式的執行,就是stage分批次作為taskSet提交到executor執行,每個task針對RDD的一個partition,執行我們定義的運算元和函式。以此類推,直到所有操作執行結束