1.通过"spark-submit"脚本将代码提交到集群中运行。
2.在初始化sparkContext上下文时,spark会创建"DAGScheduler""TeskScheduler"两个对象。
3.创建好这两个对象后,客户端(Driver)会向Master节点发送一个Application任务。
4.Master在接受到Application任务后,会进行资源调度。
5.Master会找到对应的Worker节点。
6.Worker节点在接受到Master发送来的任务后,会启创建对应的Executor。
7.Executor创建完成后,会反向向客户端(Driver)进行注册。
8.当spark中的RDD遇到Action算子时,DAGScheduler会根据宽依赖来化分Stage,根据窄依赖生成Task。如何在每个Stage中创建一个TaskSet(TaskSet用于存放Task),并且将TaskSet提交给TaskSchedule。TaskScheduler在得到TaskSet后,会将Task提交到Executor中。
9.当Task进入到Executor中后,回去线程池中获取对应的线程,开始执行任务(会到对应的DataNode中去读取数据),此过程会生成两种Task:ShuffleMapTask和ResultTask。