下面,通過一張圖來學習一下RDD在Spark中運行流程,如圖1所示。
圖1 RDD在Spark中的運行流程
在圖1中,,Spark的任務調(diào)度流程分為RDD Objects、DAGScheduler、TaskScheduler以及Worker四個部分。關于這四個部分的相關介紹具體如下:
(1)RDD Objects:當RDD對象創(chuàng)建后,SparkContext會根據(jù)RDD對象構建DAG有向無環(huán)圖,然后將Task提交給DAGScheduler。
(2)DAGScheduler:將作業(yè)的DAG劃分成不同的Stage,每個Stage都是TaskSet任務集合,并以TaskSet為單位提交給TaskScheduler。
(3)TaskScheduler:通過TaskSetManager管理Task,并通過集群中的資源管理器(Standalone模式下是Master,Yarn模式下是ResourceManager)把Task發(fā)給集群中Worker的Executor。若期間有某個Task失敗,則TaskScheduler會重試;若TaskScheduler發(fā)現(xiàn)某個Task一直沒有運行完成,則有可能在空閑的機器上啟動同一個Task,哪個Task先完成就用哪個Task的結果。但是,無論Task是否成功,TaskScheduler都會向DAGScheduler匯報當前的狀態(tài),若某個Stage運行失敗,則TaskScheduler會通知DAGScheduler重新提交Task。需要注意的是,一個TaskScheduler只能服務一個SparkContext對象。Worker:Spark集群中的Worker接收到Task后,把Task運行在Executor進程中,這個Task就相當于Executor中進程中的一個線程。一個進程中可以有多個線程在工作,從而可以處理多個數(shù)據(jù)分區(qū)(例如運行任務、讀取或者存儲數(shù)據(jù))。
猜你喜歡:
RDD容錯機制?RDD是如何恢復數(shù)據(jù)的?
怎樣使用Spark方法完成RDD的創(chuàng)建?
RDD為什么要進行數(shù)據(jù)持久化?持久化操作步驟
spark筆記之RDD容錯機制之checkpoint
傳智教育Python+大數(shù)據(jù)開發(fā)培訓