spark学习笔记2 spark应用执行机制

spark的主要模块:调度与任务分配  i/o模块 通信控制模块 容错模块  shuffle模块

1、应用转换流程

action算子触发job提交,提交到spark的job生成RDD DAG,经过DAGScheduler转化为stage DAG,每个stage中产生相应的task集合,taskscheduler讲任务分发到executor执行。每个任务对应相应的一个数据块,使用用户定义的函数处理数据。

更详细的说,spark应用程序进行各种transformation的计算,最后通过action触发job。提交之后首先通过sparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler进行解析,解析时是以shuffle为边界,反向解析,构建stage,stage之间也有依赖关系。这个过程就是对DAG图进行解析划分stage,并且计算出各个stage之间的依赖关系。然后将一个个TaskSet提交给底层调度器,在spark中是提交给taskScheduler处理,生成TaskSet manager,最后提交给executor进行计算,executor多线程计算,计算完反馈给TaskSetmanager,再反馈给taskScheduler,然后再反馈回DAGScheduler。全部运行完之后写入数据。

spark为了系统的内存不会快速用完,使用延迟执行,只有操作累积到action,算子才会触发整个操作序列的执行,中间结果不会单独

重新分配内存,而是在同一个数据块上进行流水线操作。

2、spark应用的概念

spark应用的执行模式有local,standalone,yarn, mesos。根据程序的driver program是否在集群中运行,spark应用的运行方式又可以分为cluster和client

模式。

(1)job:一个rdd graph触发的作业。包含多个task组成的并行计算,往往由action催生。

(2)stage:job的调度单位。每个job根据rdd的依赖关系被划分为很多的stage,每个stage包含一组相同的task,这一组task也叫taskset。

(3)task:被送到某个executor上的工作单元。

(4)taskSet:一组关联的,相互之间没有shuffle依赖关系的任务组成的任务集。

(5)Driver Program:运行程序的main函数并创建sparkcontext

一个应用程序由一个driver program和多个job构成。一个job由多个stage组成。一个stage由多个没有shuffle关系的task组成。

3、应用提交与执行方式

(1)driver进程运行在客户端,对应用进行管理监控

客户端启动后直接运行用户程序,启动Driver相关的工作:DAGScheduler和BlockManagerMaster等。客户端的Driver向Master注册。
Master还会让Worker启动Exeuctor。Worker创建一个ExecutorRunner线程,ExecutorRunner会启动ExecutorBackend进程。
ExecutorBackend启动后会向Driver的SchedulerBackend注册,Driver就可以找到计算资源。Driver的DAGScheduler解析作业并生成相应的Stage,每个Stage包含的Task通过TaskScheduler分配给Executor执行。所有stage都完成后作业结束。

(2)Driver在worker运行

客户端提交作业给Master,Master让一个Worker启动Driver,即SchedulerBackend。Worker创建一个DriverRunner线程,DriverRunner启动SchedulerBackend进程。
另外Master还会让其余Worker启动Exeuctor,即ExecutorBackend。Worker创建一个ExecutorRunner线程,ExecutorRunner会启动ExecutorBackend进程。
ExecutorBackend启动后会向Driver的SchedulerBackend注册。SchedulerBackend进程中包含DAGScheduler,它会根据用户程序,生成执行计划,并调度执行。对于每个stage的task,都会被存放到TaskScheduler中,ExecutorBackend向SchedulerBackend汇报的时候把TaskScheduler中的task调度到ExecutorBackend执行。
所有stage都完成后作业结束。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章