Spark速成之2 執行架構

2021-08-27 21:08:17 字數 3968 閱讀 9975

本節首先介紹

spark

的基本概念和架構設計方法,然後介紹

spark

執行基本流程。

1.基本概念

在具體講解

spark

執行架構之前,需要先了解幾個重要的概念:1、

rdd:是彈性分布式資料集(

resilient distributed dataset

)的簡稱,是分布式記憶體的乙個抽象概念,提供了一種高度受限的共享記憶體模型;2、

dag:是

directed acyclic graph

(有向無環圖)的簡稱,反映

rdd之間的依賴關係;3

、executor

:是執行在工作節點(

worker node

)上的乙個程序,負責執行任務,並為應用程式儲存資料;

4、應用:使用者編寫的

spark

應用程式;

5、任務:執行在

executor

上的工作單元;

6、作業:乙個作業包含多個

rdd及作用於相應

rdd上的各種操作;

7、階段:是作業的基本排程單位,乙個

作業會分為多組任務

,每組任務被稱為「階段」

,或者也被稱為

「任務集」。

2.架構設計

如圖9-5

所示,spark

執行架構包括

集群資源管理器(cluster manager)

、執行作業任務的

工作節點(worker node)

、每個應用的

任務控制節點(driver)

和每個工作節點上負責具體任務的

執行程序(executor)

。其中,集群資源管理器可以是

spark

自帶的資源管理器,也可以是

yarn

或mesos

等資源管理框架。

與hadoop mapreduce

計算框架相比,

spark

所採用的

executor

有兩個優點:一是利用多執行緒來執行具體的任務(

hadoop mapreduce

採用的是程序模型),減少任務的啟動開銷;二是

executor

中有乙個

blockmanager儲存模組

,會將記憶體和磁碟共同作為儲存裝置,當需要多輪迭代計算時,可以將中間結果儲存到這個儲存模組裡,下次需要時,就可以直接讀該儲存模組裡的資料,而不需要讀寫到

hdfs

等檔案系統裡,因而有效減少了

io開銷;或者在互動式查詢場景下,預先將表快取到該儲存系統上,從而可以提高讀寫

io效能。

圖9-5 spark

執行架構

總體而言,如圖

9-6所示,在

spark

中,乙個應用(

)由乙個任務控制節點(

driver

)和若干個作業(

job)構成,乙個作業由多個階段(

stage

)構成,乙個階段由多個任務(

task

)組成。當執行乙個應用時,任務控制節點會向集群管理器(

cluster manager

)申請資源,啟動

executor

,並向executor

傳送應用程式**和檔案,然後在

executor

上執行任務,執行結束後,執行結果會返回給任務控制節點,或者寫到

hdfs

或者其他資料庫中。

圖9-6 spark

中各種概念之間的相互關係

3.spark執行基本流程

如圖9-7

所示,spark

的基本執行流程如下:(1

)當乙個

spark

應用被提交時,首先需要為這個應用構建起基本的執行環境,即由任務控制節點(

driver

)建立乙個

sparkcontext

,由sparkcontext

負責和資源管理器(

cluster manager

)的通訊以及進行資源的申請、任務的分配和監控等。

sparkcontext

會向資源管理器註冊並申請執行

executor

的資源;(2

)資源管理器為

executor

分配資源,並啟動

executor

程序,executor

運**況將隨著「心跳

」傳送到資源管理器上;(3

)sparkcontext

根據rdd

的依賴關係構建

dag圖,

dag圖提交給

dag排程器(dagscheduler)

進行解析,將

dag圖分解成多個「階段

」(每個階段都是乙個任務集),並且計算出各個階段之間的依賴關係,然後把乙個個

「任務集

」提交給底層的

任務排程器(taskscheduler)

進行處理;

executor

向sparkcontext

申請任務,任務排程器將任務分發給

executor

執行,同時,

sparkcontext

將應用程式**發放給

executor;(

4)任務在

executor

上執行,把執行結果反饋給任務排程器,然後反饋給

dag排程器,

執行完畢後寫入資料

並釋放所有資源。

圖9-7 spark

執行基本流程圖

總體而言,

spark

執行架構具有以下特點:(1

)每個應用都有自己專屬的

executor

程序,並且該程序在應用執行期間一直駐留。

executor程序以多執行緒的方式執行任務

,減少了多程序任務頻繁的啟動開銷,使得任務執行變得非常高效和可靠;(2

)spark

執行過程與資源管理器無關,只要能夠獲取

executor

程序並保持通訊即可;(3

)executor

上有乙個

blockmanager

儲存模組,類似於鍵值儲存系統

(把記憶體和磁碟共同作為儲存裝置),在處理迭代計算任務時,不需要把中間結果寫入到

hdfs

等檔案系統,而是直接放在這個儲存系統上,後續有需要時就可以直接讀取;在互動式查詢場景下,也可以把錶提前快取到這個儲存系統上,提高讀寫

io效能;(4

)任務採用了

資料本地性

和推測執行

等優化機制。資料本地性是盡量將計算移到資料所在的節點上進行,即

「計算向資料靠攏

」,因為移動計算比移動資料所佔的網路資源要少得多。而且,

spark

採用了延時排程機制,可以在更大的程度上實現執行過程優化。比如,擁有資料的節點當前正被其他的任務占用,那麼,在這種情況下是否需要將資料移動到其他的空閒節點呢?答案是不一定。因為,

如果經過**發現當前節點結束當前任務的時間要比移動資料的時間還要少,那麼,排程就會等待,直到當前節點可用

Spark執行架構

job 包含多個task組成的平行計算,乙個dag觸發的作業,由action運算元觸發,在sparkcontext中通過runjob方法向spark提交job stage job的排程單位,每個job會根據rdd的寬依賴關係被切分成很多stage,每個stage中包含一組相同的task,這組task...

Spark執行架構

在driver program中新建sparkcontext 包含sparkcontext的程式稱為driver program 2 sparkcontext向資源管理器申請執行executor資源,並啟動standaloneexecutorbackend,executor向sparkcontent...

Spark執行架構

spark執行架構要背下來 driver program 執行main函式的程序,並且建立了乙個sparkcontext cluster manager 乙個從cluster申請資源的外部服務 deploy mode 區分driver程序跑在 client模式下,driver跑在本地 cluster...