架構(gòu)流程圖
說明
1. SparkContext初始化 (Standalone模式)
1.首先spark-submit提交Spark應(yīng)用程序Application.
2.提交之后spark會(huì)通過反射的方式創(chuàng)建和構(gòu)造一個(gè)DriverActor進(jìn)程(Driver進(jìn)程).
3.Driver進(jìn)程啟動(dòng)后會(huì)進(jìn)行SparkContext初始化莺褒,SparkContext初始化過程中做的最重要的兩件事就是構(gòu)造DAGScheduler和TaskScheduler.
4.構(gòu)造完TaskScheduler時(shí)行瑞,TaskScheduler會(huì)去連接Master并向Master注冊(cè)Application
5.Master接收到Application注冊(cè)請(qǐng)求后會(huì)使用自己的資源調(diào)度算法同诫,在Spark集群的Work上為這個(gè)Application啟動(dòng)多個(gè)Executor.
6.Executor啟動(dòng)之后反注冊(cè)到TaskScheduler.
7.當(dāng)所有Executor都反向注冊(cè)到TaskScheduler之后嘴高,Driver結(jié)束SparkContext的初始化。至此舔痪,SparkContext的初始化就告一段落了,接著會(huì)繼續(xù)執(zhí)行我們自己編寫的代碼。
2.TaskSet的創(chuàng)建與提交
1.上面講到蔼啦,SparkContext的初始化完成之后,接著會(huì)繼續(xù)執(zhí)行我們自己編寫的代碼仰猖,每執(zhí)行到一個(gè)Action操作就會(huì)創(chuàng)建一個(gè)job,該job會(huì)提交到DAGScheduler捏肢,劃分為多個(gè)stage(stage劃分算法),然后為每個(gè)stage創(chuàng)建一個(gè)TaskSet.
2.TaskScheduler把TaskSet中的每一個(gè)task提交到executor上執(zhí)行饥侵。哪些task提交到哪些executor上執(zhí)行鸵赫?(task分配算法).
3.executor執(zhí)行task
1.Executor每次收到一個(gè)task都會(huì)用TaskRunner來封裝task,然后從線程池里取出一個(gè)線程執(zhí)行這個(gè)task.(TaskRunner將需執(zhí)行的算子及函數(shù)、拷貝躏升、反序列化然后執(zhí)行task.)
2.Task有兩種辩棒,ShuffleMapTask和ResultTask,只有最后一個(gè)stage是ResultTask,之前的stage都是ShuffleMapTask膨疏。