首頁技術(shù)文章正文

RDD在Spark中是怎樣運(yùn)行的?

更新時間:2021-06-17 來源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif

下面,通過一張圖來學(xué)習(xí)一下RDD在Spark中運(yùn)行流程,如圖1所示。

RDD在Spark中的運(yùn)行流程

圖1 RDD在Spark中的運(yùn)行流程


在圖1中,,Spark的任務(wù)調(diào)度流程分為RDD Objects、DAGScheduler、TaskScheduler以及Worker四個部分。關(guān)于這四個部分的相關(guān)介紹具體如下:

(1)RDD Objects:當(dāng)RDD對象創(chuàng)建后,SparkContext會根據(jù)RDD對象構(gòu)建DAG有向無環(huán)圖,然后將Task提交給DAGScheduler。

(2)DAGScheduler:將作業(yè)的DAG劃分成不同的Stage,每個Stage都是TaskSet任務(wù)集合,并以TaskSet為單位提交給TaskScheduler。

(3)TaskScheduler:通過TaskSetManager管理Task,并通過集群中的資源管理器(Standalone模式下是Master,Yarn模式下是ResourceManager)把Task發(fā)給集群中Worker的Executor。若期間有某個Task失敗,則TaskScheduler會重試;若TaskScheduler發(fā)現(xiàn)某個Task一直沒有運(yùn)行完成,則有可能在空閑的機(jī)器上啟動同一個Task,哪個Task先完成就用哪個Task的結(jié)果。但是,無論Task是否成功,TaskScheduler都會向DAGScheduler匯報當(dāng)前的狀態(tài),若某個Stage運(yùn)行失敗,則TaskScheduler會通知DAGScheduler重新提交Task。需要注意的是,一個TaskScheduler只能服務(wù)一個SparkContext對象。Worker:Spark集群中的Worker接收到Task后,把Task運(yùn)行在Executor進(jìn)程中,這個Task就相當(dāng)于Executor中進(jìn)程中的一個線程。一個進(jìn)程中可以有多個線程在工作,從而可以處理多個數(shù)據(jù)分區(qū)(例如運(yùn)行任務(wù)、讀取或者存儲數(shù)據(jù))。



   



猜你喜歡:

RDD數(shù)據(jù)丟失后如何恢復(fù)?RDD容錯機(jī)制介紹

RDD如何分區(qū),各種模式下的分區(qū)數(shù)目是怎樣的?

Spark RDD是什么?RDD特征介紹

黑馬程序員Python+大數(shù)據(jù)開發(fā)課程

分享到:
在線咨詢 我要報名
和我們在線交談!