五:spark作业调度与执行

一:spark调度管理的基本概念

1. Application
           基于Spark的应用程序,由一个或多个作业组成。每个应用程序的执行涉及Driver program和集群上的Executors两部分。
2.Job
        Job即作业,是包含多个Task的并行计算,其与Appliction中的执行操作一一对应,也就是说Application每提交一个执行操作Spark就对应生成一个Job。
3.Task
       Task即任务,是被送到Executor执行的工作单元。RDD中的每个分区都对应相应的Task,而每个Task对应于Executor中的一个线程。
4.Executor
      是worker上某个Application启动的一个进程,该进程负责执行任务并且负责将数据存储在内存或磁盘中。一个worker节点上可能有多个Executor,但是每个Executor中仅执行一个Application对应的任务。也就是说,不同的Application通过Executor无法共享数据。
5.Cluster Manager
      是在集群上获取资源的外部服务。在执行Spark Application过程中,集群上的资源如何调度,由Cluster Manager进行管理。

二:作业调度流程

   1.一个spark作业被逐步拆分成更小的调度单元,最终以任务的形式按照一定的逻辑依赖关系依次提交执行,并返回结果。
    2.在作业调度的相关类中,最重要的就是DAGScheduler和TaskScheduler。DAGScheduler是基于DAG的调度类,负责将作业拆分成不同的阶段具有依赖关系的多批任务组,在逻辑上实现对Spark作业的调度。TaskScheduler则根据不同的任务需求,负责调度和管理每个任务所需的资源,在物理层面实现对Spark作业的执行。

五:spark作业调度与执行
五:spark作业调度与执行

首先在RDD的转化过程中,父RDD与子RDD之间形成依赖关系,同时也确定了DAG;在Action执行后,DAG图由DAGScheduler将DAG中划分成若个stage(stage中包含若干个RDD,这些RDD之间全部都是在依赖的关系)。DAGScheduler是面向stage的调度器,其调度的单位是stage。每个stage对应一个Taskset,因此DAGScheduler是以Taskset的形式向TaskScheduler提交每个stage(其中一个TaskScheduler只为一个sparkContext服务),这些Task被分布到集群节点上去运算(TaskScheduler 负责具体的task调度,在Worker节点上启动task

3. 总结

DAGScheduler将一个DAG划分成若干个子图,每个子图对应一个Stage,每个Stage中包含了若干个RDD,而每个RDD又由若干个分区组成,其中每个分区上的数据与计算又对应着Task。所以一个Stage可视为一组Task,即Taskset,Taskset中是一组相关的、无须进行Shuffle操作的Task。

注:

  • Job => 包含多个task的并行计算,一个action触发一个job
  • stage => 一个job会被拆为多组task,每组任务称为一个stage,以shuffle进行划分

4. 参考链接

https://blog.****.net/zhouzx2010/article/details/51965196

https://www.cnblogs.com/liuliliuli2017/p/6809094.html