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 具體執行應用程...