以下内容参考http://www.cnblogs.com/luogankun/p/3912956.html
一、集群启动过程--启动Master
二、集群启动过程--启动Worker
Worker运行时,需要注册到指定的master url
Worker启动之后主要做了两件事情:
1)将自己注册到Master(RegisterWorker);
2)定期发送心跳信息给Master;
Worker向Master发送注册信息:
Master侧收到RegisterWorker通知:
Worker在收到Master发来的注册成功信息后,定期向Master发送心跳信息
Master在接收到Worker发送来的心跳信息后更新最后一次心跳时间
Master定期移除超时未发送心跳信息给Master的Worker节点
三、Application提交过程
A、提交Application
spark-shell属于application,在启动SparkContext的createTaskScheduler创建SparkDeploySchedulerBackend的过程中创建
会向Master发送RegisterApplication请求
B、 Master处理RegisterApplication的请求
在Master侧其处理的分支是RegisterApplication;Master在收到RegisterApplication请求之后,Master进行调度:
如果有worker已经注册上来,发送LaunchExecutor指令给相应worker
C、启动Executor
Worker在收到LaunchExecutor指令之后,会启动Executor进程
D、注册Executor
启动的Executor进程会根据启动时的入参,将自己注册到Driver中的SchedulerBackend
E、运行Task
SchedulerBackend收到Executor的注册消息之后,会将提交到的Spark Job分解为多个具体的Task,然后通过LaunchTask指令将这些Task分散到各个Executor上真正的运行。
每当有新的application注册到master,master都要调度schedule函数将application发送到相应的worker,在对应的worker启动相应的ExecutorBackend,最终的Task就运行在ExecutorBackend中。