Spark运行过程-三种模式

ark的运行模式多种多样,灵活多变,部署在单机上时,既可以用本地模式运行,也可以用伪分布模式运行,而当以分布式集群方式部署时,也有众多的运行模式可供选择,这取决于集群的实际情况,底层的资源调度即可以依赖外部资源调度框架,也可以使用Spark内建的Standalone模式。
1、本地模式:Spark单机运行,常用于本地开发测试,本地还分为local和local cluster。
2、Standalone模式:构建一个由Master+Slave构成的Spark集群,Spark运行在集群中。
3、Spark on Mesos模式:Spark客户端直接连接Mesos。不需要额外构建Spark集群。
4、Spark on Yarn模式:Spark客户端直接连接Yarn。不需要额外构建Spark集群。
注:对外部资源调度框架的支持,目前相对稳定的有Mesos模式,以及hadoop YARN模式。

一、Standalone模式

Standalone模式使用Spark自带的资源调度框架。
在这里插入图片描述
1、使用SparkSubmit提交任务的时候(包括Eclipse或者其它开发工具使用new SparkConf()来运行任务的时候),Driver运行在Client;使用SparkShell提交的任务的时候,Driver是运行在Master上
2、使用SparkSubmit提交任务的时候,使用本地的Client类的main函数来创建sparkcontext并初始化它;
3、SparkContext连接到Master,注册并申请资源(内核和内存)。
4、Master根据SC提出的申请,根据worker的心跳报告,来决定到底在那个worker上启动StandaloneExecutorBackend(executor)
5、executor向SC注册
6、SC将应用分配给executor,
7、SC解析应用,创建DAG图,提交给DAGScheduler进行分解成stage(当出发action操作的时候,就会产生job,每个job中包含一个或者多个stage,stage一般在获取外部数据或者shuffle之前产生)。然后stage(又称为Task Set)被发送到TaskScheduler。TaskScheduler负责将stage中的task分配到相应的worker上,并由executor来执行
8、executor创建Executor线程池,开始执行task,并向SC汇报
9、所有的task执行完成之后,SC向Master注销

二、yarn client

Yarn-Client模式中,Driver在客户端本地运行,这种模式可以使得Spark Application和客户端进行交互,因为Driver在客户端,所以可以通过webUI访问Driver的状态。
在这里插入图片描述
1、spark-submit脚本提交,Driver在客户端本地运行;
2、Client向Resource Manager申请启动Application Master,同时在SparkContext(client上)中创建DAGScheduler和TaskScheduler。
3、Resource Manager收到请求之后,查询Node Manager并选择其中一个,分配container,并在container中开启Application Master
4、client中的SparkContext初始化完成之后,与Application Master进行通信,向Resource Manager注册,根据任务信息向Resource Manager申请资源
5、Application Master申请到资源之后,与Node Manager进行通信,要求在它申请的container中开启CoarseGrainedExecutorBackend(executor)。Executor在启动之后会向SparkContext注册并申请task
6、SC分配task给executor,executor执行任务并向Driver(运行在client之上的)汇报,以便客户端可以随时监控任务的运行状态,从而可以在任务失败时重新启动任务
7、任务运行完成之后,client的SparkContext向Resource Manager注销自己并关闭自己

三、yarn cluster

YARN将分两个阶段运行该应用程序:
第一个阶段是把Spark的Driver作为一个ApplicationMaster在YARN集群中先启动;
第二个阶段是由Application Master创建应用程序,然后为它向Resource Manager申请资源,并启动Executor来运行Task,同时监控它的整个运行过程,直到运行完成
在这里插入图片描述
1、spark-submit脚本提交,向yarn(Resource Manager)中提交Application Master程序、Application Master启动的命令和需要在Executor中运行的程序等
2、Resource Manager收到请求之后,选择一个Node Manager,在其上开启一个container,在container中开启Application Master,并在Application Master中完成SparkContext的初始化
3、SparkContext向ResourceManager注册并请求资源,这样用户可以在Resource Manager中查看任务的运行情况。Resource Manager根据请求采用轮询的方式和RPC协议向各个Node Manager申请资源并监控任务的运行状况直到结束
4、Application Master申请到资源之后,与对应的Node Manager进行通信,要求在其上获取到的Container中开启CoarseGrainedExecutorBackend(executor), executor 开启之后,向Application Master中的SparkContext注册并申请task
5、Application Master中的SparkContext分配task给executor,executor运行task并向Application Master中的SparkContext汇报自己的状态和进度
6、应用程序完成之后(各个task都完成之后),Application Master向Resource Manager申请注销自己并关闭自己

Spark Client 和 Spark Cluster的区别:

1、理解YARN-Client和YARN-Cluster深层次的区别之前先清楚一个概念:Application Master。在YARN中,每个Application实例都有一个ApplicationMaster进程,它是Application启动的第一个容器。它负责和ResourceManager打交道并请求资源,获取资源之后告诉NodeManager为其启动Container。从深层次的含义讲YARN-Cluster和YARN-Client模式的区别其实就是ApplicationMaster进程的区别
2、YARN-Cluster模式下,Driver运行在AM(Application Master)中,它负责向YARN申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行,因而YARN-Cluster模式不适合运行交互类型的作业
YARN-Client模式下,Application Master仅仅向YARN请求Executor,Client会和请求的Container通信来调度他们工作,也就是说Client不能离开

发布了30 篇原创文章 · 获赞 0 · 访问量 358

猜你喜欢

转载自blog.csdn.net/hua_chang/article/details/104868817
今日推荐