Spark应用执行机制

来源:互联网 发布:mac的cmd在哪里 编辑:程序博客网 时间:2024/06/06 03:38

Spark是专门为大规模数据设计的快速通用计算引擎。

Spark应用(Application)为用户提交的应用程序。执行模式有Local(测试),Standalone、Yarn和Mesos。根据Spark Application的Driver Program是否在集群中运行,Spark应用的运行方式又可以分为CustomerCluster模式和Client模式。


Spark涉及的基本概念:

Application:Spark的应用程序,用户提交后,Spark为App分配资源,将程序转换并执行,其中Application包含一个Drive Program和若干个Executor。

Driver Progream: 运行Application的main()函数,并创建SparkContext。

SparkContext:Spark程序的入口,负责调度各个运算资源,协调各个worker Node上的Executor。

RDD Graph:RDD是Spark的核心结构,可以通过一系列算子进行操作(主要有Transformation和Action操作)。当RDD遇到Action算子时,将之前所有的算子形成一个有向无形环(DAG),再在Spark中转化为Job,提交到集群执行。一个App中可以包含多个Job。

Executor:是为Application在Worker Node上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘中。每个Application都会申请各自的Executor来处理任务。

Work Node:集群中任何可以运行Application代码的节点,运行一个或多个Executor进程。


Spark组件:

Job:一个RDD Graph触发的作业,往往由Spark Action触发算子,在SparkContext中通过runJob方法想Spark提交Job。

Stage:每个Job会根据RDD的依赖关系被切分为很多歌Stage,每个Stage中会包含一组相投的Task,这一组Task也叫TaskSet

Task:一个分区对应一个Task,Task执行RDD中对应的Stage包含的算子,Task被封装好后放入Exector的线程池中执行。

DAGScheduler:根据Job构建基于Stage的DAG,并提交Stage给TaskSheduler。

TaskScheduler:将TaskSet提交给worker Node集群并返回结果。


Spark执行机制

RDD的Action算子触发Job的提交,提交到Spark中的Job生成的RDD DAG(有向无形环),由



Spark的底层实现

Spark的底层通过RDD对数据进行管理,RDD有一组分布在不同节点的数据块,当Spark的应用在对这个RDD进行操作的时候,调度器将包含操作的任务分发到指定的机器上执行,在计算节点通过多线程的方式执行任务。一个操作执行完毕,RDD便转换到另一个RDD,这样,用户的操作依次执行。Spark为了系统的内存不至于快速用完,使用延迟执行的方法执行,只有操作累积到Action,算子才会触发整个操作序列的执行,中间结果不会单独再重新分配内存,而是在同一个数据块上进行流水线操作。


Spark实现了分布式计算和任务处理,并实现了任务的分发、跟踪、执行等工作,最终聚合结果,完成Spark应用的计算。

对RDD的块管理通过BlockManager完成,BlockManager将数据抽象为数据块,在内存或者磁盘进行存储,如果数据不在本节点,则还可以通过远端节点复制到本机进行计算。

在计算节点的执行器Exector中会创建线程池,这个执行器将需要执行的任务通过线程池进行并发执行。


应用提交和执行方式








0 0