浅析Spark作业基本执行原理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅析Spark作业基本执行原理
摘要: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-),男,湖北荆门人,硕士,工程师,主要研究方向:大数据,
云计算。