1.构建Spark Application的运行环境(启动SparkContext),SparkContext向资源管理器(可以是Standalone、Mesos或YARN)注册并申请运行Executor资源;
2.资源管理器分配Executor资源并启动StandaloneExecutorBackend,Executor运行情况将随着心跳发送到资源管理器上;
3.SparkContext构建成DAG图,将DAG图分解成Stage,并把Taskset发送给Task Scheduler。Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行同时SparkContext将应用程序代码发放给Executor。
4.Task在Executor上运行,运行完毕释放所有资源。
提交spark应用程序
1:初始化sparkContext
(1)、createTaskScheduler
第一步创建TaskSchedulerImpl
第二步创建需要的SchedulerBackend
第三步scheduler初始化scheduler.initialize
(2)、new DAGScheduler
(3)、创建SparkUI
2:Master主备切换,注册,状态改变
Active Master挂掉切换到Standby Master,(主Master挂掉,备用的Master切换为主Master),然后新的Master进行注册其他。
(1)备用Master启动:completeRecovery中removerWorker和finishApplication方法,一是清理出故障或者甚至已经死掉的worker,二是清理出故障或者甚至已经死掉的Application;更新等待中的application状态,清理不属于任何worker的driver,最后调度schedule()。
(2)创建ApplicationInfo,注册Application,将ApplicationInfo进行持久化,向driver发送RegisteredApplication消息。
(3)移除driver,移除execuster,移除application。