一、master启动UML图
1、在start-master.sh脚本中调用Mater.scala中的main方法
2、在main方法中封装spark参数,并调用startRpcEnvAndEndpoint()创建RpcEnv
3、在startRpcEnvAndEndpoint中创建RpcEnv(AkkaSystem),创建masterEndPoint(actor),new Master(),实例化Master
4、实例化Master后会调用Master的Onstart()方法
5、在onStart()中启动webinfo,然后通过定时器循环发送消息给自己
self.send(CheckForWorkerTimeOut),通过case object执行
6、在case Object中调用timeOutDeadWorker(),检查超时的work
7、在timeOutDeadWorker()中检查超时的worker,调用removeWorker(worker)删除节点,原理就是修改3个集合,其中,会对每个节点尝试15次检查。
8、master启动完成后,在recive()方法中定义大量的case object,等待接受其他actor的请求
二。work启动UML图
- 在worker启动时,通过脚本start-slave.sh脚本中调用main()
- 在main()中封装参数,调用startRpcEnvAndEndpoint()创建RpcEnv
- 在startRpcEnvAndEndpoint()中创建RpcEnv和endpiont,并实例化Worker,执行Worker的onStart()方法
- 在onStart()方法中主要流程:
- 创建工作目录
- 启动shuffleservice
- 创建worker webui
- 调用registerWithMaster()向master注册worker
- 在registerWithMaster()方法中"
- 首先worker回向master注册自己
- 其次会启动定时任务,不断的向自己发送caseclass,调用reregisterWithMaster()
- 在reregisterWithMaster()方法中,如果之前的注册失败,会重复(15、16次)注册自己
- 如果在registerWithMaster()中注册成功,master会向worker发送case object RegisteredWorker,worker接收到消息后,会定时向master发送心跳
- master接收到心跳信息后,会修改worker的上次心跳时间