spark原始碼 worker啟動原理和原始碼

2022-08-24 02:48:06 字數 2289 閱讀 4842

worker啟動一般包含兩大部分:driverrunner和excetorrunner。

worker啟動driver的幾個基本原理,最核心的是。worker內部會啟動乙個執行緒,這個執行緒可以理解為driverrunner。然後driverrunner會去負責啟動driver程序,並在之後對driver程序進行管理。

worker的啟動步驟:

1- master要求worker啟動driver和excetor、launchdriver『launchexcetor。

2- worker在內部launchdriver啟動了乙個執行緒driverrunner;建立driver的工作目錄; 封裝啟動driver的命令,用processbuilder啟動driver。

3- worker在內部通過launchexector啟動乙個exectorrunner;建立excetor的工作目錄,封裝啟動excetor的命令,用processbuilder啟動excetor。

4- excetor找到對應的driver,去反向註冊自己。

launchdriver原始碼如下:
case launchdriver(driverid, driverdesc) =>loginfo(s

"asked to launch driver $driverid")

val driver = new

driverrunner(

conf,

driverid,

workdir,

sparkhome,

driverdesc.copy(command =worker.maybeupdatesslsettings(driverdesc.command, conf)),

self,

workeruri,

securitymgr)

drivers(driverid) =driver

driver.start()

coresused +=driverdesc.cores

memoryused +=driverdesc.mem

case killdriver(driverid) =>loginfo(s

"asked to kill driver $driverid")

drivers.

get(driverid) match

case driverstatechanged @ driverstatechanged(driverid, state, exception) =>handledriverstatechanged(driverstatechanged)

case reregisterwithmaster =>reregisterwithmaster()

}

launchexecutor的原始碼如下:
if (masterurl !=activemasterurl)

else

//create local dirs for the executor. these are passed to the executor via the

//spark_executor_dirs environment variable, and deleted by the worker when the

// val localrootdirs =utils.getorcreatelocalrootdirs(conf)

val dirs = localrootdirs.flatmap

catch

. ignoring this directory.")

none

}}.toseq

if(dirs.isempty) .")

}dirs

})val manager = new

executorrunner(

execid,

cores_,

memory_,

self,

workerid,

host,

webui.boundport,

publicaddress,

sparkhome,

executordir,

workeruri,

conf,

/" + execid) =manager

manager.start()

coresused +=cores_

memoryused +=memory_

} catch

some(e.tostring), none))}}

拓展:中華石杉--spark從入門到精通-第49講

Celery 原始碼解析七 Worker 之間的互動

序列文章 前面對於 celery 的分布式處理已經做了一些介紹,例如第五章的遠端控制和第六章的event機制,但是,我認為這些分布式都比較簡單,並沒有體現出多例項之間的協同作用,所以,今天就來點更加複雜的,對於多例項直接的互動更多,這就是 gossip 和 mingle。在 celery 的介紹中,...

Nginx原始碼分析 worker程序的建立

nginx原始碼分析 worker程序的建立 假設現在ngx init cycle已經結束 畢竟這個函式確實龐大 也就是說關於nginx的初始化都已經結束。那麼看看如何建立程序模型ngx master process cycle。在這個函式中,首先情況一些訊號,然後將需要關注的訊號註冊進去 這個時候...

Spark原始碼分析 Spark整體架構

術語 描述使用者編寫的程式。driver端的sparkcontext sparkconf和執行在executors上使用者編寫的業務邏輯 即map reduce reducebykey等 driver 執行使用者編寫應用程式的main 方法並建立sparkcontext worker 具體執行應用程...