摘要: 在Spark消息通信原理(三)(https://www.cnblogs.com/SysoCjs/p/11355900.html)中第(6)点提到过,Executor是任务执行的容器,executor接收到LaunchTask消息之后(其实是GoraseGrainedExecutorBackend接收 阅读全文
posted @ 2019-08-15 11:43 KamShing 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 首先熟悉一下该阶段的一些重要方法的调用关系图: 在上一篇提交调度阶段中,提到:当该阶段不存在父调度阶段时,就会调用DAGScheduler的submitMissingTasks方法。这个方法就是触发任务的提交。在方法中,会根据调度阶段Partition个数拆分对应的个数的任务,一个partition 阅读全文
posted @ 2019-08-15 11:38 KamShing 阅读(311) 评论(0) 推荐(0) 编辑
摘要: Spark作业执行中,有一个步骤是给任务进行资源分配,实际上这些任务由一些任务管理器TaskSetManager负责管理,资源分配过程中,会先根据某种排序算法排好序,然后根据就近原则给任务进行资源分配。那么关于TaskSetManager的排序是根据哪个算法呢?现在就来介绍。 排序算法由两种调度策略 阅读全文
posted @ 2019-08-15 11:37 KamShing 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 在上一篇划分调度阶段中的handleJobSubmitted方法中,提到finalStage的生成,在生成finalStage的同时,建立起所有Stage的依赖关系,然后通过finalStage生成一个作业实例,在该作业实例中按照顺序提交调度阶段进行执行,在执行过程中监听总线获取作业、阶段执行的情况 阅读全文
posted @ 2019-08-15 09:07 KamShing 阅读(317) 评论(0) 推荐(0) 编辑
摘要: Spark调度阶段的划分是由DAGScheduler实现,DAGScheduler会从最后一个RDD出发,根据RDD的lineage使用广度优先算法遍历整个依赖树(总共使用了两次,一次是遍历区分ResultStage范围;另一次则是遍历获取ShuffleMapStage划分依据,用来划分每个Shuf 阅读全文
posted @ 2019-08-15 08:37 KamShing 阅读(551) 评论(0) 推荐(0) 编辑