Spark工作機制
spark作業:
Application : 使用者自定義的spark程式。使用者提交後,spark為app分配資源將程式轉換並執行。
Driver Program : 執行Application的main()函式並建立SparkContext。
RDD DAG : 當RDD遇到Action運算元,將之前的所有運算元形成一個有向無環圖(DAG)。再在Spark中轉化為job,提交到叢集進行執行。一個app中可包含多個job。
Job : 一個RDD Graph觸發的作業,往往由Spark Action運算元觸發,在SparkContext中通過runJob方法像Spark提交Job。
Stage : DAG Scheduler為每個Job會根據RDD寬窄依賴關係被切分很多個Stage,每個Stage中包含一組相同的Task,這一組Task也叫TaskSet。
Task : 一個分割槽對應一個Task,Task執行RDD中對應Stage中包含的運算元。Task Scheduler將Task封裝後放入Executor的執行緒池中之行。執行模式分為:FIFO(先進先出)與FAIR(公平排程)兩種模式。
總結:
job,stage,task之間的關係:
Job,Stage,Task是Spark任務執行流程中的三個基本單位。其中Job是最大的單位,Job是Spark應用的action運算元催生的;stage是由job拆分,在單個job內是根據shuffle運算元來拆分stage的,單個stage內部可以根據操作資料的分割槽數劃分多少個task。
一個application會啟動一個Driver Program,Driver Program會啟動多個job,一個job中又會根據RDD的依賴關係切分成不同的stage,stage之間形成一個DAG,DAG的每一個節點是一個stage,每個stage會生成一組TaskSet任務集,每一個Task對應一個block,在block塊上執行