第十五章调度管理
常用的作业调度基本概念:
Job:作业,一次Action生成的一个或多个Stage组成的一次计算作业
Stage:调度阶段,不需要进行Shuffle的调度过程,一个任务及所对应的调度阶段
TaskSet:任务集,一组相互关联的,且没有Shuffle依赖关系的任务组成的集合
Task:任务,单个分区数据集上的最小处理单元
1 应用程序间的调度
静态资源分配
动态资源分配:资源分配策略
2 应用程序中的调度
公平调度池
配置调度池属性
3 调度器
1)简介
调度器2)调度池
调度池3)Job调度流程
Job调度流程提交并运行一个Job的基本流程:
1、划分Job
2、生成Job,提交Stage
3、任务集的提交
4、任务作业完成状态的监控
5、任务结果的获取
4)调度模块
1、DAGScheduler
DAGScheduler是一个高级的Scheduler层,它实现了基于Stage的调度,为每一个Job都计算Stage,跟踪哪一个RDD和Stage的输出被固化,以及寻找到执行Job的最小的调度,然后将Stage作为TaskSets提交给底层的TaskScheduler,有TaskScheduler执行。
DAGScheduler的主要功能是接受用户提交的Job,将Job根据类型划分为不同的Stage,并在每一个Stage内产生一系列的Task,向TaskScheduler提交Task。
2、TaskSetManager
DAGScheduler负责将一组任务提交给TaskScheduler以后,这组任务的调度工作已经完成,接下来这组任务内部的调度逻辑,则是由TaskSetManager完成的。
3、TaskScheduler
每一个TaskScheduler只为一个单独的SparkContext进行调度安排的任务,DAGScheduler会为每一个阶段向TaskScheduler提交taskset(也就是说,taskset是在DAGScheduler完成组装),TaskScheduler会负责向集群发送任务,并且调用后台运行任务。同时,在任务失败时重试,然后会将运行任务,重试任务的事件返回给DAGScheduler。
TaskSchedulerListener:TaskSchedulerListener部分的主要功能是监听用户提交的工作,将工作分解为不同类型的舞台以及相应的任务,并向TaskScheduler提交任务。
TaskScheduler:TaskScheduler接收用户提交的任务并执行。
TaskScheduler根据部署的不同又分为三个子模块:ClusterScheduler,LocalScheduler,MesosScheduler,TaskScheduler会根据部署方式而选择不同的SchedulerBackend来处理。在SparkContext.createTaskScheduler中,针对不同的部署方式会>有不同的TaskScheduler与SchedulerBackend进行组合:
Local模式:TaskSchedulerlmpl + LocalBackend;Spark集群模式:TaskSchedulerlmpl + SparkDepolySchedulerBackend;
Yarn-Cluster模式:YarnClusterScheduler + CoarseGrainedSchedulerBackend;
Yarn-Client模式:YarnClientClusterScheduler + YarnClientSchedulerBackend
TaskScheduler类负责任务调度资源的分配,SchedulerBackend负责与主人,工人通信收集工人上分配给该应用使用的资源情况。
4、Stage
根据RDD依赖关系的不同, Spark也将每一个Job分为不同的Stage,而Stage之间的依赖关系则形成DAG,
- 对于NarrowDependency, Spark会尽量多地将RDD转换放在同一个Stage中;
- 而对于WideDependency, 由于WideDependency通常意味着Shuffle操作,因此Spark会将此Stage定义ShuffleMapStage,以便于向MapOutputTracker注册Shuffle操作。
Spark通常将Shuffle操作定义为Stage的边界。
- (1) ShuffleMapStage
这种Stage是以Shuffle为输出边界,其输入边界可以是从外部获取数据,也可以是另一个ShuffleMapStage的输出,其输出可以是另一个Stage的开始。ShuffleMapStage的最后Task就是ShuffleMapTask,在一个Job里可能有该类型的Stage,也可能没有该类型的 Stage。 - (2) ResultStage
这种Stage是直接输出结果,其输入边界可以是从外部获取数据,也可以是另一个 ShuffleMapStage的输出。ResultStage的最后Task就是ResultTask,在一个Job里必定有该类,型的Stage,一个Job含有一个或多个Stage,但至少含有一个ResultStage.
5)存储管理
1、Shuffle数据持久化
由于Shuffle涉及了磁盘的读写和网络的传输,因此Shuffle性能的高低直接影响到整个程序的运行效率。
2、存储层storage
在Storage模块中所有的操作都是和Block相关的,但是在RDD中所有的运算都是基于Partition的,那么Partition是如何与Block对应上的呢?
RDD的Transformation, Action和Block数据建立了联系,虽然抽象上我们的操作是在Partition层面上进行的,但是Partition最终还是被映射成为Block,因此实际上我们的所有操作都是对Block的存取和处理。
6)RDD分区和数据块关系
1)分区和数据块一一对应
2)分区和数据块的对应关系是通过名称上的约定进行的,每个RDD都有一个唯一的ID,每个分区都有唯一的索引,以ID+索引号作为数据块名便自然的建立起了分区与块的映射。
Boy-20180717
网友评论