Spark學習筆記4 spark執行機制

2021-08-21 13:42:58 字數 1820 閱讀 6092

spark執行架構包括集群資源管理器(cluster manager)、執行作業任務的工作節點(worker node)、每個應用的任務控制節點(driver)和每個工作節點上負責具體任務的執行程序(executor)。其中,集群資源管理器可以是spark自帶的資源管理器,也可以是yarn或mesos等資源管理框架。

與hadoop mapreduce計算框架相比,spark所採用的executor有兩個優點:一是利用多執行緒來執行具體的任務(hadoop mapreduce採用的是程序模型),減少任務的啟動開銷;二是executor中有乙個blockmanager儲存模組,會將記憶體和磁碟共同作為儲存裝置,當需要多輪迭代計算時,可以將中間結果儲存到這個儲存模組裡,下次需要時,就可以直接讀該儲存模組裡的資料,而不需要讀寫到hdfs等檔案系統裡,因而有效減少了io開銷;或者在互動式查詢場景下,預先將表快取到該儲存系統上,從而可以提高讀寫io效能。

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排程器,執行完畢後寫入資料並釋放所有資源。

總體而言,spark執行架構具有以下特點:

(1)每個應用都有自己專屬的executor程序,並且該程序在應用執行期間一直駐留。executor程序以多執行緒的方式執行任務,減少了多程序任務頻繁的啟動開銷,使得任務執行變得非常高效和可靠;

(2)spark執行過程與資源管理器無關,只要能夠獲取executor程序並保持通訊即可;

(3)executor上有乙個blockmanager儲存模組,類似於鍵值儲存系統(把記憶體和磁碟共同作為儲存裝置),在處理迭代計算任務時,不需要把中間結果寫入到hdfs等檔案系統,而是直接放在這個儲存系統上,後續有需要時就可以直接讀取;在互動式查詢場景下,也可以把錶提前快取到這個儲存系統上,提高讀寫io效能;

(4)任務採用了資料本地性和推測執行等優化機制。資料本地性是盡量將計算移到資料所在的節點上進行,即「計算向資料靠攏」,因為移動計算比移動資料所佔的網路資源要少得多。而且,spark採用了延時排程機制,可以在更大的程度上實現執行過程優化。比如,擁有資料的節點當前正被其他的任務占用,那麼,在這種情況下是否需要將資料移動到其他的空閒節點呢?答案是不一定。因為,如果經過**發現當前節點結束當前任務的時間要比移動資料的時間還要少,那麼,排程就會等待,直到當前節點可用。

Spark學習筆記(一) spark簡介

spark是基於記憶體計算的大資料平行計算框架。09年誕生於加州大學伯克利分校amplab.spark是mapreduce的替代方案,相容hdfs hive等分布式儲存層,可融入hadoop的生態系統,以彌補mapreduce的不足。其主要優勢如下 中間結果輸出 可以將多stage的任務串聯或者並行...

spark 學習筆記

最近使用spark簡單的處理一些實際中的場景,感覺簡單實用,就記錄下來了。部門使用者業績表 1000w測試資料 使用者 部門 業績 資料載入 val context new sparkcontext conf var data context.textfile data.txt 場景1 求每個部門的...

spark學習筆記

1 缺省會寫成一堆小檔案,需要將其重新分割槽,直接指定幾個分割槽 spark.sql select row number over partition by depid order by salary rownum from emp repartition 2 write.parquet hdfs ...