最近在研究Spark源码,顺便记录一下,供大家学习参考,如有错误,请批评指正。好,废话不多说,这一篇先来讲讲Spark作业提交流程的整体架构。
第一种,基于Standalone的方式,整体架构如下图所示;
基于Standalone架构图
1.当向一个Standalone模式集群中提交一个Application的时候,第一步首先通过反射的机制创建一个DriverActor(这里指Driver)进程;
2.接着初始化SparkContext对象出来,在SparkContext初始化的时候创建出了两个很重要的对象,分别为DAGScheduler和TaskScheduler对象;
3.通过Task Scheduler向Spark集群的Master请求注册,Master接收到请求以后,通知Worker启动Executor,Worker节点为Application启动Executor进程;
4.当Executor启动以后,会反向注册到Task Scheduler上面去;
5.DAGScheduler会分配一个Stage(即一个Taskset集合)给TaskScheduler,TaskScheduler把TaskSet集合中的每个task通过task分配算法提交到executor上面去执行;
6.executor接收到一个task任务之后,将其包装成一个TaskRunner对象并调用线程池中的一条线程去执行task;
第二种,基于yarn-cluster模式的架构图,如下图所示;
Yarn-cluster模式
1.Spark提交作业到Yarn集群,向ResourceManager请求启动ApplicationMaster;
2.ResourceManager分配一个Container,然后在Yarn集群中的某个NodeManager中启动ApplicationMaster;
3.ApplicationMaster启动完成以后向ResourceManager请求分配一批Container资源,以运行Spark作业;
4.ResourceManager接收到来自ApplicationMaster的请求以后,开始一批Container资源用于启动executor;
5.当executor启动成功以后,将其信息向ApplicationMaster进行注册;
第三种,Yarn-client模式的模式,如下图所示;
Yarn-client模式
关于Yarn-client与Yarn-cluster两种模式的区别与使用场景;
区别:这两种spark作业提交方式的区别在于Driver所处的位置不同。
使用场景:Yarn-client模式主要用于测试环境,因为使用该模式提交作业的时候,可以在客户端实时观察作业运行产生的日志及作业的运行状况;Yarn-cluster模式用于实际生产环境,因为其运行的作业所产生的日志是在远程的节点上,不方便程序的调试。
总结:以上简单介绍了三种Spark作业的提交方式;上述的三种模式中的每个组件的内部工作原理会在后续的文章一一解答,包括Master资源分配算法,DAGScheduler的stage划分算法,TaskScheduler任务分配算法等等。欢迎关注。
如需转载,请注明:
Spark内核分析之spark作业的三种提交方式
作者:z小赵
链接:https://www.jianshu.com/p/4ff64cad1cb8
共同学习,写下你的评论
评论加载中...
作者其他优质文章