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理解做用不是很大且理解比较抽象,能够先读后续内容,回头再考虑看这部份内容,或者不读