日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Spark核心原理之Executor原理

發(fā)布時間:2023/12/13 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 Spark核心原理之Executor原理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Executor是Spark執(zhí)行任務(wù)的進(jìn)程,Spark啟動Executor過程包括如下步驟:

1)使用Spark-submit提交到集群,Master收到RequesSubmitDriver請求。

2)Master調(diào)用scheduler把Driver程序發(fā)送到worker端執(zhí)行。

3)Driver執(zhí)行時初始化SparkContext,創(chuàng)建AppClient,向Master注冊,其中Appclient中實現(xiàn)了內(nèi)部類ClientEndPoint,和Master進(jìn)行通信。

4)Master收到注冊信息后,完成application注冊,調(diào)用Scheduler程序,向Worker發(fā)送LaunchExecutor請求,其中Scheduler主要有兩個作用:完成Driver的調(diào)度,將waitingDriver數(shù)組中的Drivers發(fā)送的到滿足運行條件的worker上執(zhí)行(launchDriver函數(shù));在Worker節(jié)點上啟動Executor執(zhí)行Application。

5)Worker啟動ExecutorRunner,在ExecutorRunner中啟動CoarseCrainedExecutorBackend,在其中創(chuàng)建Executor,完成向Driver注冊。

Executor中CachedThreadPool是一個線程池分配線程,任務(wù)被分發(fā)到Executor中以TaskRunner線程形式申請線程池線程,執(zhí)行。接下來介紹Executor的創(chuàng)建,分配和啟動等關(guān)鍵操作。

Executor創(chuàng)建

上文已講到Executor創(chuàng)建主要是首先由Scheduler線程啟動,Scheduler線程通過調(diào)用startExecutorsOnWorkers方法完成,遍歷worker選擇出所有可用的workers,之后調(diào)用scheduleExecutorsOnWorkers進(jìn)行worker選擇,有兩種策略:round-robin策略(默認(rèn)),依次全占策略。分配好worker后調(diào)用allocateWorkerResourceToExecutor在worker上分配資源。主要調(diào)用launchExecutor,該函數(shù)向worker發(fā)送啟動Executor請求,同時向driver返回新Executor啟動信息。

下面轉(zhuǎn)到worker端,worker收到launchExecutor消息后調(diào)用LaunchExecutor函數(shù),主要負(fù)責(zé)創(chuàng)建本地目錄,保存目錄和appid的映射,創(chuàng)建ExecutorRunner線程,該線程負(fù)責(zé)下載依賴文件,并啟動CoarseGaindExecutorBackend,此進(jìn)程的啟動方式是通過建造者模式,通過CommandUtils的ProcessBuilder創(chuàng)建于一個獨立的JVM中,此線程向DriverActor發(fā)送registerExecutor信息,收到driverActor回復(fù)后創(chuàng)建Executor。

Executor通過CoarseGrainedExecutorBackend創(chuàng)建,所以運行于一個獨立的JVM中,可以通過配置參數(shù)調(diào)整Executor占用資源大小,創(chuàng)建之前會進(jìn)行參數(shù)的傳遞和配置。

Executor通信接口ExecutorBackend

ExecutorBackend是Executor向集群更新消息的接口,不同spark模式有不同實現(xiàn)。

Executor執(zhí)行過程

DAGScheduler劃分好Stage,通過submitMissingTasks分配好任務(wù),將任務(wù)經(jīng)過TaskScheduler的TaskSchedulerImpl的submitTask方法,將tasks加入調(diào)度pools,之后調(diào)用通信終端riviveOffers方法為Tasks指定Executor,最后想CoarseGranedExecutorBackend發(fā)送LaunchTasks信息。

Executor收到信息后會調(diào)用launchTasks方法,此方法會構(gòu)建TaskRunner對象運行Tasks并放入線程池中執(zhí)行。

TaskRunner作為一個線程類,run函數(shù)主要完成以下任務(wù):

1)向driver發(fā)送stateUpdate信息

2)反序列出task和相關(guān)jar包

3)調(diào)用task的run方法,返回結(jié)果

總結(jié)

以上是生活随笔為你收集整理的Spark核心原理之Executor原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。