Spark任務提交執行全流程詳解

2021-09-01 00:06:34 字數 1255 閱讀 3614

spark任務的本質是對我們編寫的rdd的依賴關係切分成乙個個stage,將stage按照分區分批次的生成taskset傳送到executor進行任務的執行

spark任務分兩種:

1、shufflemaptask:shuffle之後的task

2、resulttask:shuffle之前的task

spark任務分配有兩種方式:

1,盡量打撒方式(系統預設)

2,盡量集中方式

然後在driver端,呼叫sparksubmit類,內部執行submit–>dorunmain–>通過反射獲取應用程式的主類物件(遠端**物件)–>執行主類的main方法,這是提交,

driver端構建sparkconf和sparkcontext物件,在sparkcontext入口類做了三件事,建立了sparkenv物件(建立了actorsystem物件)、taskscheduler(用來生成並傳送task給executor)、dagscheduler(用來劃分stage)

當開始執行這個任務資訊時,呼叫scheduler方法,進行資源排程。

將排程好的資源封裝到launchexecutor並傳送給對應的worker

worker接收到master傳送過來的排程資訊(launchexecutor)後,將資訊封裝成乙個executorrunner物件

封裝成executorrunner後,呼叫executorrunner的start方法,開始啟動coarsegrainedexecutorbackend物件(啟動executor)

executor啟動後向driveractor進行反向註冊

與driveractor註冊成功後,建立乙個執行緒池(threadpool),用來執行任務

當所有executor註冊完成後,意味著作業環境準備好了,driver端會結束與sparkcontext物件的初始化

dagscheduler開始進行stage劃分

將劃分好的stage按照分割槽生成乙個乙個的task,並且封裝到taskset物件,然後taskset提交到taskscheduler

taskscheduler接收到提交過來的taskset,拿到乙個序列化器對taskset序列化,將序列化好的taskset封裝到launchexecutor並提交到driveractor

driveractor把launchexecutor傳送到executor上

executor接收到driveractor傳送過來的任務(launchexecutor),會將其封裝成taskrunner,然後從執行緒池中獲取執行緒來執行taskrunner

Spark指令碼提交 執行 部署

執行spark shell需要指向申請資源的standalone spark集群資訊,其引數為master,還可以指定executor及driver的記憶體大小。sudo spark shell executor memory 5g driver memory1g master spark spar...

Spark指令碼提交 執行 部署

尊重版權,謝謝分享 執行spark shell需要指向申請資源的standalone spark集群資訊,其引數為master,還可以指定executor及driver的記憶體大小。sudo spark shell executor memory 5g driver memory1g master ...

29 非同步任務提交執行架構

非同步任務提交執行架構 類關係圖 示例 執行緒池提交runnable任務 示例 執行緒池提交callable任務 executor 執行緒提交介面 executor runnable c 將runnable任務提交到執行緒池中 executorservice 執行緒池介面 提交非同步任務方法 exe...