1.启动spark集群 start-all.sh 启动spark中的master和worker节点
2.worker进程启动起来之后向master发送注册信息 worker 是基于 akka的事件驱动模型
3.worker 注册成功之后不断的向master发送心跳包 监听主节点是否存在
4.Driver向spark集群中的master提交作业,发送一个RegisterApplication得case class 注册申请需要用多少资源
5.Master收到Driver提交的作业请求之后向worker节点指派对应的作业,其实就是对应的worker节点启动对应的executor进程
6.worker节点 接收到master节点启动的executer任务后,启动对应的进程,并向master汇报可以接收任务
7.当executor进程启动之后,就向Driver进程反向注册,(基于akka)告诉driver谁可以接收任务
8.driver 接收到注册之后就知道向谁发送spark作业
9.DAGScheduler组件 根据我们编写的spark作业,将spark作业分成若干阶段的stage,然后为每一个阶段组装一批task 组成taskset 然后将这些taskset交给 taskscheduler, 由taskscheduler来将任务分发给对应的executor
10.当executor进程接收到driver发送过来的taskset之后 进行反序列化,将这些task封装进taskrunner的线程中 然后放进本地线程池,调度我们得作业执行