Master做爲Endpoint的具體實例,下面咱們介紹一下Master啓動以及OnStart指令後的相關工做
1、腳本概覽
下面是一個舉例:
/opt/jdk1.7.0_79/bin/java
-cp /opt/spark-2.1.0/conf/:/opt/spark-2.1.0/jars/*:/opt/hadoop-2.6.4/etc/hadoop/
-Xmx1g
-XX:MaxPermSize=256m
org.apache.spark.deploy.master.Master
--host zqh
--port 7077
--webui-port 8080
2、啓動流程
Master的啓動流程以下:
- SparkConf:加載key以spark.開頭的系統屬性(Utils.getSystemProperties)
- MasterArguments:
- 解析Master啓動的參數(--ip -i --host -h --port -p --webui-port --properties-file)
- 將--properties-file(沒有配置默認爲conf/spark-defaults.conf)中spark.開頭的配置存入SparkConf
- NettyRpcEnv中的內部處理遵循RpcEndpoint統一處理,這裏再也不贅述
- BoundPortsResponse返回rpcEndpointPort,webUIPort,restPort真實端口
- 最終守護進程會一直存在等待結束信awaitTermination
3、OnStart監聽事件
Master的啓動完成後異步執行工做以下:
- 【dispatcher-event-loop】線程掃描到OnStart指令後會啓動相關MasterWebUI(默認端口8080),根據配置選擇安裝ResetServer(默認端口6066)
- 另外新起【master-forward-message-thread】線程按期進行worker心跳是否超時
- 若是Worker心跳檢測超時,那麼對Worker下的發佈的全部任務所屬Driver進行ExecutorUpdated發送,同時本身在從新LaunchDriver
4、RpcMessage處理
(receiveAndReply)
消息實例 |
發起方 |
接收方 |
說明 |
RequestSubmitDriver |
Client |
Master |
提交驅動程序 |
RequestKillDriver |
Client |
Master |
|
RequestDriverStatus |
Client |
Master |
|
RequestMasterState |
MasterWebUI |
Master |
|
BoundPortsRequest |
Master |
Master |
|
RequestExecutors |
StandaloneAppClient |
Master |
|
KillExecutors |
StandaloneAppClient |
Master |
|
5、OneWayMessage
處理
(receive)
消息實例 |
發起方 |
接收方 |
說明 |
ElectedLeader |
Master |
Master |
|
CompleteRecovery |
Master |
Master |
|
RevokedLeadership |
Master |
Master |
|
RegisterWorker |
Worker |
Master |
|
RegisterApplication |
StandaloneAppClient |
Master |
|
UnregisterApplication |
StandaloneAppClient |
Master |
|
ExecutorStateChanged |
Worker/ExecutorRunner |
Master |
|
DriverStateChanged |
DriverRunner/Master |
Master |
|
Heartbeat |
Worker |
Master |
|
MasterChangeAcknowledged |
StandaloneAppClient |
Master |
|
WorkerSchedulerStateResponse |
Worker |
Master |
|
WorkerLatestState |
Worker |
Master |
|
CheckForWorkerTimeOut |
Master |
Master |
|
5、Master對
RpcMessage/
OneWayMessage處理邏輯(選讀)
這部分對總體Master理解做用不是很大且理解比較抽象,能夠先讀後續內容,回頭再考慮看這部份內容,或者不讀