1. 程式人生 > >spark核心架構剖析--Application執行過程

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,執行我們定義的運算元和函式。以此類推,直到所有操作執行結束