本節首先介紹
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...