程序员->IDEA编写代码->jar包->放到集群计算->
提交spark应用程序的机器->shell中spark-submit脚本提交程序->运行Driver进程(client模式和提交机器相同)->new sparkContext对象->sparkContext在初始化的时候,会启动UI,设置spark的env,做的最重要的事情就是构造出一个TaskScheduler和一个DAGScheduler->
- TaskScheduler->负责它对应的一个后台进程,去连接Master,向Master注册这个Application->Master接收到Application注册过来的请求之后,会用资源调度的算法,在spark集群的Worker上为这个App启动多个Executor进程->Executor启动之后会反向注册到TaskScheduler上面来->所有Executor都反向注册到Driver上之后,Driver结束SparkContext初始化,会继续执行我们自己编写的代码。
- DAGScheduler -> Job的切分(action)->stage的切分(宽依赖)->生成包含多个task(pipeline)的taskSet->TaskScheduler将taskSet打散->TaskScheduler会(通过分配算法)把Taskset里面的每一个Task提交到Executor上去执行->Executor的线程去运行包含Task的TaskRunner
->总结,最后整个这个Spark应用程序的执行就是Stage分批次的做为Taskset提交到Executor里面执行,每个Task针对RDD的一个partition,执行我们的算子和函数,task并行执行。
本文详细介绍了Spark应用程序从提交到执行的全过程,包括如何通过spark-submit脚本提交程序,Driver进程的启动,SparkContext的初始化过程,以及TaskScheduler和DAGScheduler如何协同工作来调度任务并最终在Executor上执行。
2975

被折叠的 条评论
为什么被折叠?



