Spark內核源碼解析


1.spark內核架構常用術語

Application:基於spark程序,包含一個driver program(客戶端程序)和多個executeor(線程)

Driver Progrom:代表着sparkcontext

executeor:某個Application運行在worker node上的一個進程,該進程負責運行Task,並且將數據存儲到內存或者磁盤上,每個Application都有各自獨立的executeor。

worker node:集群中任何可以運行Application代碼的節點。

Task:被傳送到某個executeor的工作單元。

Cluster Manager:在集群上獲取外部服務(例如:Standalone\Year\Mesos)

job:包含多個Task組成的並行計算,往往有spark的action催生

stage:每個job會被拆分很多組task任務,每組任務被稱為stage,也稱為TaskSet

RDD:Spark的基本計算單元,可以通過一系列算子進行操作(主要有Transformation和Action)

DAG Scheduler:根據job構建基於Stage的DAG,並提交Stage給Task Scheduler

Task Scheduler:將Taskset提交給worker(集群)運行並回報結果

 

2.創建SparkContext

 

 

 

1.1 在shell下,spark-submit使用standalone模式提交的時候,其實會通過反射的方式,創建和構造一個Driveractor(和java的actor進程差不多)

1.2 Driver進程在執行我們提交的Application代碼的時候,會先構建SparkConf,再構建SparkContext.

1.3 SparkContext在初始化的時候,做的最重要的事情,就是構造DAG Scheduler和Task Scheduler

1.4 TaskScheduler實際上,是會負責與它對應的一個后台進程,去連接Spark集群的Master並注冊Application

1.5 Master接收到Application的注冊請求后,會使用自己的資源調度算法(基於調度器standalone、Yarn、Mesos等都有不同的調度算法),在Spark集群的Worker上會為i這個Application啟動Executor

1.6 Master通知Worker啟動Executor后,Worker會為Application啟動Executor進程

1.7 Executer啟動后,首先做的就是會將自己反向注冊給Task Scheduler上去,到此為止SparkContext完成了初始化

3.運行Application

2.1 所有的Executer都會反向注冊給Driver programe,Driver Programe當結束SparkContextc初始化后,會繼續只想我們編寫的代碼哦

2.2 每執行一個Action就會創建一個job,job會提交給DAG Scheduler

2.3 DAG Scheduler會采用自己的stage划分算法將job划分為多個stage,然后每個stage會創建一個TaskSet

2.4 DAG Scheduler會將TaskSet傳遞給Task Scheduler,Task Scheduler會把TaskSet里的每一個Task提交到Worker上的Executer上執行

2.5 Executor每接收一個task都會用TaskRunner來封裝task,然后從線程池里面取出一個線程,執行這個task,TaskRunner將我們編寫的代碼,也就是要執行的算子以及函數,拷貝,反序列化,然后執行Task。

2.6 Task有兩種,ShuffleMapTsk和ResultTask。只有最后一個stage是ResultTask,之前的stage,都是ShuffleMapTask.

2.7所以,最后整個應用程序的執行,就是將stage分批次作為taskSet提交給executeor執行,每個task針對RDD的一個partition,執行我們定義的算子和函數,為此類推,知道所有的操作完成為止。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM