**:spark應用程式的執行架構
幾個基本概念:
(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應用的詳細過程
(1)使用者通過 spark-submit 指令碼提交應用。
(2)spark-submit 指令碼啟動驅動器程式,呼叫使用者定義的 main() 方法。
(3)驅動器程式與集群管理器通訊,申請資源以啟動執行器節點。
(4)集群管理器為驅動器程式啟動執行器節點。
(5)驅動器程序執行使用者應用中的操作。根據程式中所定義的對rdd的轉化操作和行動操作,驅動器節點把工作以任務的形式傳送到執行器程式。
(6)任務在執行器程式中進行計算並儲存結果。
(7)如果驅動器程式的 main() 方法退出,或者呼叫了 sparkcontext.stop(),驅動器程式會終止執行器程序,並且通過集群管理器釋放資源。
Spark應用程式的執行架構
1 簡單的說 由driver向集群申請資源,集群分配資源,啟動ex ecutor。driver將spark應用程式的 和檔案傳送給executor。executor上執行task,執行完之後將結果返回給driver或者寫入外界。2 複雜點說 提交應用程式,構建sparkcontext,構建dag圖,...
spark應用程式的執行架構
幾個基本概念 1 job 包含多個task組成的平行計算,往往由action催生。2 stage job的排程單位。3 task 被送到某個executor上的工作單元。4 taskset 一組關聯的,相互之間沒有shuffle依賴關係的任務組成的任務集。乙個應用程式由乙個driver progra...
Spark應用程式執行 階段的劃分
sparkcontext物件包含有乙個私有屬性dagscheduler階段排程器,主要用於階段的劃分。在乙個應用程式中,任務的提交都是從行動運算元觸發的。行動運算元的方法內部會呼叫乙個runjob方法,其中就有dag排程器發揮執行job的作用 dagscheduler.runjob rdd,clea...