浅析Spark作业基本执行原理

(整期优先)网络出版时间:2019-11-21
/ 1

浅析Spark作业基本执行原理

曹廷付宇

(武汉软件工程职业学院,湖北武汉430205)

摘要:Spark是一种通用大数据处理框架,它扩展了广泛使用的MapReduce计算模型[1]。Spark的作业和任务调度系统是Spark的核心,由于它对任务划分DAG和容错机制,使得作业调度和执行能够高效执行。本文将Spark的作业执行流程分为六个阶段进行分析介绍,揭示了Spark作业执行的基本原理。

关键词:Spark框架;大数据处理;作业执行

Spark的作业调度主要是指基于RDD的一系列操作构成一个作业,然后在Executor中执行。Spark作业调度依赖两个调度器:DAGScheduler和TaskScheduler,其中DAGScheduler负责任务的逻辑调度,将Job作业拆分成不同阶段的具有依赖关系的任务集,而TaskScheduler则负责具体任务的调度执行[2]。从整体上对Spark的作业和任务调度系统进行分析,可将执行流程分为提交作业、划分调度阶段、提交调度阶段、提交任务、执行任务、获取执行结果六个阶段[3]。

1.提交作业

作业的提交是从RDD.count方法开始的,它会触发SparkContext的runJob方法来提交作业。该方法会进入DAGScheduler的runJob方法,在该方法中调用submitJob方法,这里进程会发生阻塞,直到收到作业完成或失败的结果。此外,在submitJob方法中会创建一个JobWaiter对象,将该对象发送给调度实践进程池进行处理,在接收到完成模式匹配的消息之后就开始了划分调度阶段。

2.划分调度阶段

划分调度阶段的依据是RDD的操作是否为宽依赖(ShuffleDependency)进行的,即当RDD的操作为宽依赖时,则以该操作为界限划分成前后两个调度阶段。

DAGScheduler从最后一个RDD开始,通过getParentStages判断它依赖的祖先RDD是否存在Shuffle操作,如果没有Shuffle操作则本次作业只会生成一个ResultStage;如果存在Shuffle操作,则本次作业会生成一个ResultStage和至少一个ShuffleMapStage,该ResultStage存在父调度阶段,从发生Shuffle操作的RDD向前遍历,找出所有的ShuffleMapStage,然后通过registerShuffleDependencies和newOrUsedShuffleStage划分所有的ShuffleMapStage。当所有调度阶段划分完毕之后,按照依赖关系按顺序提交调度阶段进行运行。

3.提交调度阶段

提交调度阶段通过submintStage方法完成。在该方法中获取finalStage的父调度阶段,并将其放入waitingStages列表中,同时递归调用submitStage方法,直到找到没有父调度阶段的stage;如果不存在父调度阶段则使用submitMissingTasks方法提交执行。把不存在父调度阶段的stage作为作业运行的入口,相继提交后续调度阶段。

4.提交任务

当提交调度阶段完成之后,DAGScheduler会根据调度阶段划分拆分成对应的任务,这些任务会组成一个任务集合提交到TaskSchedular。TaskSchedular接收到任务集之后会给每个任务集构建TaskSetManager来管理任务集,并将TaskSetManager放入系统调度池中,根据系统调度算法分配资源,然后将分配好资源的任务发送到Worker节点上。

5.执行任务

当任务被发送到worker节点之后会调用Executor的launchTask方法进行处理,在launchTask方法中对任务进行封装生成TaskRunner来管理任务运行时的细节,再把TaskRunner放到线程池中运行。TaskRunner的run方法首先会对任务本身和它所依赖的文件反序列,然后对反序列化的任务调用runTask方法执行任务。

6.获取执行结果

任务执行完毕后TaskRunner将执行结果传递给DriverEndPoint之后,再转给TaskSchedulerImpl处理,该方法对不同状态的任务作出不同的处理,如果任务是Shuffle类型,在MapOutputTrackerMaster中完成对该任务的处理,如果任务是ResultTask,作业执行完毕就标记为已经完成,并释放资源通知系统总线。

参考文献

[1]张琴.大数据处理统一引擎ApacheSpark研究.现代制造技术与装备,2017(8).

[2]郭景瞻.《图解Spark核心技术与案例实战》.2017.

[3]刘恒.Spark缓存机制和作业调度策略研究.四川师范大学,2019.

作者简介:曹廷(1990.05-),女,湖北荆门人,硕士,工程师,主要研究方向:移动互联,前端技术;

付宇(1986.09-),男,湖北荆门人,硕士,工程师,主要研究方向:大数据,云计算。