Spark運(yùn)行架構(gòu)

基礎(chǔ)概念

RDD:彈性分布式數(shù)據(jù)集(Resilient Distributed Dataset)它是分布式內(nèi)存的抽象概念,可以理解成spark的對(duì)象,在spark當(dāng)中都是對(duì)RDD進(jìn)行讀寫,計(jì)算,是sprak當(dāng)中的核心。
DAG:Directed Acyclic Graph(有向無(wú)環(huán)圖)這個(gè)比較好理解,在圖論當(dāng)中,如果從一個(gè)點(diǎn)觸發(fā)經(jīng)過(guò)若干條邊以后,沒(méi)有回到這個(gè)點(diǎn),就是有向無(wú)環(huán)圖。DAG在spark當(dāng)中主要是反應(yīng)RDD之間關(guān)系的一種圖結(jié)構(gòu)。
Executor:spark的工作進(jìn)程。
Task:運(yùn)行在Executor上的一個(gè)工作單元。
Job:一個(gè)Job對(duì)應(yīng)多個(gè)RDD以及對(duì)RDD的操作。
階段:一個(gè)Job可以被分為多個(gè)階段,每一個(gè)階段我們就稱之為階段吧~~~~

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

spark運(yùn)行架構(gòu)

Spark的運(yùn)行架構(gòu)基本如上圖所示,基本上就是通過(guò)Cluster Manager 集群管理器來(lái)調(diào)度SparkContext(需要執(zhí)行的計(jì)算程序)分配給Worker Node(線程)然后執(zhí)行這些任務(wù)。這里和hadoop的MapReduce有個(gè)區(qū)別,Hadoop使用的是進(jìn)程模型,Spark才用的是線程模型,可以減少執(zhí)行任務(wù)時(shí)候的開銷。

運(yùn)行流程

spark的運(yùn)行流程

總結(jié)

(1)每個(gè)應(yīng)用都有自己專屬的Executor進(jìn)程,并且該進(jìn)程在應(yīng)用運(yùn)行期間一直駐留。Executor進(jìn)程以多線程的方式運(yùn)行任務(wù),減少了多進(jìn)程任務(wù)頻繁的啟動(dòng)開銷,使得任務(wù)執(zhí)行變得非常高效和可靠;
(2)Spark運(yùn)行過(guò)程與資源管理器無(wú)關(guān),只要能夠獲取Executor進(jìn)程并保持通信即可;
(3)Executor上有一個(gè)BlockManager存儲(chǔ)模塊,類似于鍵值存儲(chǔ)系統(tǒng)(把內(nèi)存和磁盤共同作為存儲(chǔ)設(shè)備),在處理迭代計(jì)算任務(wù)時(shí),不需要把中間結(jié)果寫入到HDFS等文件系統(tǒng),而是直接放在這個(gè)存儲(chǔ)系統(tǒng)上,后續(xù)有需要時(shí)就可以直接讀?。辉诮换ナ讲樵儓?chǎng)景下,也可以把表提前緩存到這個(gè)存儲(chǔ)系統(tǒng)上,提高讀寫IO性能;
(4)任務(wù)采用了數(shù)據(jù)本地性和推測(cè)執(zhí)行等優(yōu)化機(jī)制。數(shù)據(jù)本地性是盡量將計(jì)算移到數(shù)據(jù)所在的節(jié)點(diǎn)上進(jìn)行,即“計(jì)算向數(shù)據(jù)靠攏”,因?yàn)橐苿?dòng)計(jì)算比移動(dòng)數(shù)據(jù)所占的網(wǎng)絡(luò)資源要少得多。而且,Spark采用了延時(shí)調(diào)度機(jī)制,可以在更大的程度上實(shí)現(xiàn)執(zhí)行過(guò)程優(yōu)化。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容