本篇文章给大家分享的是有关Spark2.2.0中Spark系统架构及任务提交流程是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
在讲解Spark系统架构之前,先给大家普及一些比较重要的概念 :
术语 | 描述 |
Application | Spark的应用程序,包含一个Driver、多个Executor |
SparkContxt | spark应用程序入口,负责调度运算资源,协调worker上的executor |
Driver程序 |
运行sark应用程序的main函数,并创建sparkContext |
Executor | 运行在Worker上的一个进行,负责运行Task |
Worker | 集群中的计算节点,运行一个或多个Executor |
Task | Worker中的一个线程,Executor中的计算单元 |
Job | SparkContext提交的Action操作,有几个action就会有几个Job,应用程序会有一个、多个job |
Stage | 每个Job都会划分为多个stage执行,也称TaskSet |
RDD | spark的核心,分布式弹性数据集 |
DAGScheduler | 根据Job构建基于stage的DAG,并发送TaskScheduler执行 |
TaskScheduler | 提交Taskset给Woker进行执行,并返回执行结果 |
Transformations | RDD一种转换类型,返回值还是一个RDD,具有懒加载属性,如果程序全是Transformation,没有Action程序是不会执行的。 |
Actions | RDD一种转换类型,返回值也是一个RDD,程序只有Action操作才会被触发。 |
Spark部署模式:
这里简单说一下,详细部署请自行百度,这个网上资料很多也很全,我这里不在说了:
运行
运行 |
模式 |
描述 |
local |
本地模式 |
常用于本地开发测试,本地还分为local和local-cluster |
standalone |
集群模式 |
典型的Master/Slave模式,Master存在单点故障的,Spark支持Zookeeper来实现HA |
On Yarn |
集群模式 |
运行在Yarn资源管理器框架上,由Yarn负责资源管理,Spark负责任务调度和计算 |
On Mesos |
集群模式 |
运行在 mesos资源管理器框架上,由mesos负责资源管理,Spark负责任务调度和计算 |
On cloud |
集群模式 |
比如AWS的EMR,使用这个模式能很方便地访问Amazon的S3;Spark支持多种分布式存储系统,hdfs,S3,hbase等 |
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个数。
任务提交流程(这里以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中间数据都写本地磁盘。
以上就是Spark2.2.0中Spark系统架构及任务提交流程是怎样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/223207.html