02.12 Spark2.2.0精通:Spark系统架构、任务提交流程

如果您觉得“大数据开发运维架构”对你有帮助,欢迎转发朋友圈


在讲解Spark系统架构之前,先给大家普及一些比较重要的概念 :


Spark2.2.0精通:Spark系统架构、任务提交流程

Spark部署模式:


这里简单说一下,详细部署请自行百度,这个网上资料很多也很全,我这里不在说了:


Spark2.2.0精通:Spark系统架构、任务提交流程

Spark是一个基于内存的分布式并行处理框架,有几个关键字:分布式、基于内存、并行处理,因此学习它要学习它的分布式架构以及它实现高速并行计算的机理,下面是spark的任务执行架构图,整体划分为以下几部分:


一、Client客户端:负责任务的提交,执行提交命令,指定任务MainClass、资源需求、参数配置等;在yarn/standalone-client模式下,客户端提交程序后,Client新建一个Driver程序,这个client的作用持续到spark程序运行完毕,而yarn/standalone-cluster模式下,客户端提交程序后就不再发挥任何作用,也就是说仅仅发挥了提交程序包的作用。


二、Driver:主要是对SparkContext进行配置、初始化以及关闭。初始化SparkContext是为了构建Spark应用程序的运行环境,在初始化SparkContext,要先导入一些Spark的类和隐式转换;在Executor部分运行完毕后,需要将SparkContext关闭。


三、ClusterManager:负责接收任务的请求,分配计算资源、完成资源调度,一般采用FIFO策略;Driver向ClusterManager提交资源申请,ClusterManager结合任务资源需求和自身资源可用量,从Worker分配资源,并负责告知Driver资源分配结果,Driver接收到ClusterManager响应后发送Task到Worker执行,Worker通过心跳机制向ClusterManager汇报自己的资源和运行情况。


四、Executor:运行在worker节点上的一个进程,该进程负责运行某些Task, 并且负责将数据存到内存或磁盘上,每个Application都有各自独立的一批Executor,在Spark on Yarn模式下,其进程名称为CoarseGrainedExecutor Backend。一个CoarseGrainedExecutor Backend有且仅有一个Executor对象, 负责将Task包装成taskRunner,并从线程池中抽取一个空闲线程运行Task, 这个每一个CoarseGrainedExecutor Backend能并行运行Task的数量取决于分配给它的cpu个数。


Spark2.2.0精通:Spark系统架构、任务提交流程


任务提交流程(这里以yarn-cluster模式讲解):


1.客户端一般通过spark-submit方式提交作业到Yarn集群,直接去找的是ResourceManager(RM),然后RM分配一个Worker创建Appmaster,由AppMaster去启动Driver;

2.在Driver中运行我们提交的main函数,创建SparkContext,根据我们的Spark代码,并生成RDD的逻辑执行计划DAG,SparkContext会生成生成一批批的task,然后等待发送的Worker去执行;

3.AppMaster去向RM申请资源,RM会启动一批Executor,这些Executor会一直存在,等待Task任务到来,执行Task,直到整个任务结束,Executor的数量在整个任务执行过程中是一直不变的;最后RM将资源分配信息发送给Driver端;

4. Driver收到RM的响应后,将任务的jar发送到对应的Executor上去执行,这里执行顺序是按照RDD的DAG一批批的去执行对应的Task;在同一Stage每个Task执行相同的代码,但是处理的数据是不同的(这也是RDD中分布式的特性);


注意:

上面任务提交流程是yarn-cluster模式,这里再强调一次,1.standalone/yarn-client模式:Driver运行在Client;

2.standalone/yarn-cluster模式:Driver是运行在集群的一个Worker上。


相关知识:


Spark的核心组件:包括RDD、Scheduler、Storage、Shuffle四部分:

1.RDD是Spark最核心最精髓的部分,spark将所有数据都抽象成RDD。

2.Scheduler是Spark的调度机制,分为DAGScheduler和TaskScheduler。

3.Storage模块主要管理缓存后的RDD、shuffle中间结果数据和broadcast数据。

4.Shuffle分为Hash方式和Sort方式,两种方式的shuffle中间数据都写本地磁盘。


未完待续,由于Spark的涉及到的东西比较多,后面我会分开讲解,后面会专门写一篇文章讲解spark的核心RDD,请后续继续关注,谢谢!!


分享到:


相關文章: