幾個基本概念:
(1)job:包含多個task組成的平行計算,往往由action催生。
(2)stage:job的排程單位。
(3)task:被送到某個executor上的工作單元。
(4)taskset:一組關聯的,相互之間沒有shuffle依賴關係的任務組成的任務集。
乙個應用程式由乙個driver program和多個job構成。乙個job由多個stage組成。乙個stage由多個沒有shuffle關係的task組成。
spark應用程式的執行架構:
(1)簡單的說:
由driver向集群申請資源,集群分配資源,啟動executor。driver將spark應用程式的**和檔案傳送給executor。executor上執行task,執行完之後將結果返回給driver或者寫入外界。
(2)複雜點說:
提交應用程式,構建sparkcontext,構建dag圖,提交給scheduler進行解析,解析成乙個個 stage,提交給集群,由集群任務管理器進行排程,集群啟動spark executor。driver把**和檔案傳給executor。executor進行各種運算完成task任務。driver上的block tracker記錄executor在各個節點上產生的資料塊。task執行完之後,將資料寫入hdfs上或者其他型別資料庫裡。
(3)全面點說:
spark應用程式進行各種transformation的計算,最後通過action觸發job。提交之後首先通過 sparkcontext根據rdd的依賴關係構建dag圖,dag圖提交給dagscheduler進行解析,解析時是以shuffle為邊界,反向解 析,構建stage,stage之間也有依賴關係。這個過程就是對dag圖進行解析劃分stage,並且計算出各個stage之間的依賴關係。然後將乙個 個taskset提交給底層排程器,在spark中是提交給taskscheduler處理,生成taskset manager,最後提交給executor進行計算,executor多執行緒計算,計算完反饋給tasksetmanager,再反饋給 taskscheduler,然後再反饋回dagscheduler。全部執行完之後寫入資料。
(4)更加深入理解:
應用程式提交後,觸發action,構建sparkcontext,構建dag圖,提 交給dagscheduler,構建stage,以stageset方式提交給taskscheduler,構建taskset manager,然後將task提交給executor執行。executor執行完task後,將完成資訊提交給schedulerbackend,由 它將任務完成的資訊提交給taskscheduler。taskscheduler反饋資訊給tasksetmanager,刪除該task任務,執行下 乙個任務。同時taskscheduler將完成的結果插入到成功佇列裡,加入之後返回加入成功的資訊。taskscheduler將任務處理成功的資訊 傳給taskset manager。全部任務完成後taskset manager將結果反饋給dagscheduler。如果屬於resulttask,交給joblistener。如果不屬於resulttask,保 存結果。
spark應用程式的執行架構
spark應用程式的執行架構 幾個基本概念 1 job 包含多個task組成的平行計算,往往由action催生。2 stage job的排程單位。3 task 被送到某個executor上的工作單元。4 taskset 一組關聯的,相互之間沒有shuffle依賴關係的任務組成的任務集。乙個應用程式由...
Spark應用程式的執行架構
1 簡單的說 由driver向集群申請資源,集群分配資源,啟動ex ecutor。driver將spark應用程式的 和檔案傳送給executor。executor上執行task,執行完之後將結果返回給driver或者寫入外界。2 複雜點說 提交應用程式,構建sparkcontext,構建dag圖,...
Spark應用程式執行 階段的劃分
sparkcontext物件包含有乙個私有屬性dagscheduler階段排程器,主要用於階段的劃分。在乙個應用程式中,任務的提交都是從行動運算元觸發的。行動運算元的方法內部會呼叫乙個runjob方法,其中就有dag排程器發揮執行job的作用 dagscheduler.runjob rdd,clea...