设为首页 加入收藏

TOP

spark的运行流程
2019-02-23 13:24:34 】 浏览:72
Tags:spark 运行 流程

Spark运行流程

看任何东西都是(知其然,再知其所以然), 我会先简单的介绍流程, 让初学者有个大概的概念,

其中有很多名称,我会在下面对其做出介绍,

当 jar 在客户端进行spark-submit的时候spark流程就开始了,先概括的介绍一下流程, 在讲述一下流程中的重要组件

1.application启动之后, 会在本地启动一个Driver进程 用于控制整个流程,(假设我们使用的Standalone模式)

2 首先需要初始化的是SparkContext, SparkContext 要构建出DAGScheduler,TaskScheduler

3 在初始化TastScheduler的时候,它会去连接master,并向master 注册Application ,master 收到信息之后,会调用自己的资源调度算法,在spark集群的work上,启动Executor,并进行资源的分配, 最后将Executor 注册到TaskScheduler, 到这准备工作基本完成了

4 现在可以进行我们编写的的业务了, 一般情况下通过sc.textFile("file") 去加载数据源( 这个过程类似于mr的inputformat加载数据的过程), 去将数据转化为RDD,

5 DagScheduer 先按照action将程序划分为一至多个job(每一个job对应一个Dag), 之后对DagScheduer按照是否进行shuffer,将job划分为多个Stage 每个Stage过程都是taskset , dag 将taskset交给taskScheduler,由Work中的Executor去执行, 至于tast交给那个executor去执行, 由算法来决定,

官方给的流程图:

重要的组件

Master:Standalone模式中主控节点,负责接收Client提交的作业,管理Worker,并命令Worker启动Driver和Executor。

Worker:Standalone模式中slave节点上的守护进程,负责管理本节点的资源,定期向Master汇报心跳,接收Master的命令,启动Driver和Executor。

Driver: 一个Spark作业运行时包括一个Driver进程,也是作业的主进程,负责作业的解析、生成Stage并调度Task到Executor上。包括DAGScheduler,TaskScheduler。

SparkContext:连接到spark集群,入口点

RDD(弹性分布式数据集, 它是一个抽象的概念,实际上它并没有储存真正的数据,保存的的只是索引, 可以将它理解为数据集的代理):

是分区的集合.
弹性分布式数据集.
不可变的数据分区集合.
基本操作(map filter , persist)
分区列表 //数据
应用给每个切片的计算函数 //行为
到其他RDD的依赖列表 //依赖关系

DAGScheduler:实现将Spark作业分解成一到多个Stage,每个Stage根据RDD的Partition个数决定Task的个数,然后生成相应的Task set放到TaskScheduler中。

Dag(有向无环图): 根据actio进行划分形成的job, 为啥叫叫做Dag ,因为DagScheduler根据会根据shuffer将这个job划分为多个Stage , 阶段的划分,使job的流程更加清晰,

Stage(阶段):是task的集合,计算job中的中间结果。同一RDD的每个分区都会应用相同的计算函数。在shuffle的边界处进行隔离(因此引入了隔断,需要上一个stage完成后,才能得到output结果) 有两种类型的stage:

1)ResultStage,用于执行action动作的最终stage。

2)ShuffleMapStage,对shuffle进行输出文件的写操作的。如果job重用了同一个rdd的话,stage通常可以跨越多个job实现共享。

TaskScheduler:底层的调度器,唯一实现TaskSchedulerImpl。可插拔,同Dag调度器接受task,发送给cluster, 运行任务,失败重试,返回事件给DAG调度器。

Task:单独的工作单元,在worker节点上的Executor内执行。

Executor: spark程序执行者,通过线程池执行任务。

Transformation:用于对RDD的创建,RDD只能使用Transformation创建,同时还提供大量操作方法,包括map,filter,groupBy,join等,RDD利用这些操作生成新的RDD,但是需要注意,无论多少次Transformation,在RDD中真正数据计算Action之前都不可能真正运行。

Action:是数据执行部分,其通过执行count,reduce,collect等方法真正执行数据的计算部分。实际上,RDD中所有的操作都是Lazy模式进行,运行在编译中不会立即计算最终结果,而是记住所有操作步骤和方法,只有显示的遇到启动命令才执行。这样做的好处在于大部分前期工作在Transformation时已经完成,当Action工作时,只需要利用全部自由完成业务的核心工作。

为什么spark强于mr

1spark是基于内存运算的,

2 ,spark中间结果不落地, mr每次执行完成都回将结果重新写入磁盘,

一次mr只能完成一个job, spark中的一个action相当于一个job,一个spark程序可以有多个action,中间的job计算的结果,会存放在内存中, 当内存不够的情况下 ,才会落地倒磁盘

推荐一篇写的比较好的spark流程理解:http://www.raincent.com/content-85-11052-1.html

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spark与深度学习框架——H2O、dee.. 下一篇(十一)Spark Core求每个域名的..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目