1、spark-shell提交任务,向RM申请资源
2、RM分配container,在对应NodeMANAGER启动AM,然后AM启动driver
3、Driver 向 ResourceManager 申请资源 Executor。
4、RM返回 container 给driver
5、driver在相应NodeMANAGER启动executor
6、executor向driver反向注册
7、Executor 全部注册完,Driver 开始执行 main 函数。
8、Driver 执行函数时,遇到 action 算子就会触发一个 job,根据宽依赖划分 stage,每个 stage 生成 taskSet,将 task 分发到 Executor 上执行。
9、Executor 会不断与 Driver 通信,报告任务运行的情况。
1、参考 https://zhuanlan.zhihu.com/p/400844728