Spark程序中涉及到幾個(gè)概念,Application、Job、Stage、Task。每一個(gè)用戶(hù)寫(xiě)的程序?qū)?yīng)于一個(gè)Application,每一個(gè)Action生成一個(gè)Job(默認(rèn)包含一個(gè)Stage),每一個(gè)Shuffle算子生成一個(gè)新的Stage,每一個(gè)Stage中會(huì)有N個(gè)Task(N取決于數(shù)據(jù)量或用戶(hù)指定值)。

Spark的架構(gòu)設(shè)計(jì)

前面講述了Spark 核心邏輯概念,那么Spark的任務(wù)是如何運(yùn)行在分布式計(jì)算環(huán)境的呢?接下來(lái)我們來(lái)看看開(kāi)源框架Spark的架構(gòu)設(shè)計(jì)。

Spark是典型的主從(Master- Worker)架構(gòu),Master 節(jié)點(diǎn)上常駐 Master守護(hù)進(jìn)程,負(fù)責(zé)管理全部的 Worker 節(jié)點(diǎn)。Worker 節(jié)點(diǎn)上常駐 Worker 守護(hù)進(jìn)程,負(fù)責(zé)與 Master 節(jié)點(diǎn)通信并管理 Executor。

Spark程序在客戶(hù)端提交時(shí),會(huì)在Application的進(jìn)程中啟動(dòng)一個(gè)Driver??匆幌鹿俜綄?duì)Driver的解釋“The process running the main() function of the application and creating the SparkContext”。

我們可以把Master和Worker看成是生產(chǎn)部總部老大(負(fù)責(zé)全局統(tǒng)一調(diào)度資源、協(xié)調(diào)生產(chǎn)任務(wù))和生產(chǎn)部分部部長(zhǎng)(負(fù)責(zé)分配、上報(bào)分部的資源,接收總部的命令,協(xié)調(diào)員工執(zhí)行任務(wù)),把Driver和Executor看成是項(xiàng)目經(jīng)理(負(fù)責(zé)分配任務(wù)和管理任務(wù)進(jìn)度)和普通員工(負(fù)責(zé)執(zhí)行任務(wù)、向項(xiàng)目經(jīng)理匯報(bào)任務(wù)執(zhí)行進(jìn)度)。

項(xiàng)目經(jīng)理D to 總部老大M:Hi,老大,我剛接了一個(gè)大項(xiàng)目,需要你通知下面的分部部長(zhǎng)W安排一些員工組成聯(lián)合工作小組。

總部老大M to 分部部長(zhǎng)W:最近項(xiàng)目經(jīng)理D接了一個(gè)大項(xiàng)目,你們幾個(gè)部長(zhǎng)都安排幾個(gè)員工,跟項(xiàng)目經(jīng)理D一起組成一個(gè)聯(lián)合工作小組。

分部部長(zhǎng)W to 員工E:今天把大家叫到一起,是有個(gè)大項(xiàng)目需要各位配合項(xiàng)目經(jīng)理D去一起完成,稍后會(huì)成立聯(lián)合工作小組,任務(wù)的分配和進(jìn)度都直接匯報(bào)給項(xiàng)目經(jīng)理D。

項(xiàng)目經(jīng)理D to 員工E:從今天開(kāi)始,我們會(huì)一起在這個(gè)聯(lián)合工作小組工作一段時(shí)間,希望我們好好配合,把項(xiàng)目做好。好,現(xiàn)在開(kāi)始分配任務(wù)…

員工E to 項(xiàng)目經(jīng)理D:你分配的xxx任務(wù)已完成,請(qǐng)分配其它任務(wù)。

項(xiàng)目所有任務(wù)都完成后,項(xiàng)目經(jīng)理D to 總部老大M:Hi,老大,項(xiàng)目所有的任務(wù)都已經(jīng)完成了,聯(lián)合工作小組可以解散了,感謝老大的支持。

分享到

zhangnn

相關(guān)推薦