1. 复习, Yarn三种调度器
1.1 什么是调度器
主要是用于研究一个任务提交之后,下一个任务又来了改怎么执行. 绝对我们任务如何进行执行.
1.2 Yarn当中的调度器主要有三种
-
第一种:队列调度器FIFO: 第一个任务提交,先执行.然后第二个任务提交,等着第一个任务执行完毕之后再执行第二个任务.
第一个任务: 大任务, 需要运行4个小时
第二个任务: 小任务, 需要运行3分钟.
Yarn的调度器, Spark的任务调度, DAGSchedule, TaskSchedule, worder 131. 复习, Yarn三种调度器2. Spark任务调度 这种调度器没人用了,不管是apache软件的版本,还是CDH软件的版本.
hadoop1.x使用的是这种版本的调度器
- 第二种调度器: capacity Scheduler容量调度器, apache的版本默认使用的调度器.
-
优点: 将整个资源,换分为好多块.
根据我们提交的任务需要资源的大小,将我们的任务,划分到不听的资源队列里面去,可以允许多个任务并行的快速的执行
- 缺点: 将资源给划散了.
Yarn的调度器, Spark的任务调度, DAGSchedule, TaskSchedule, worder 131. 复习, Yarn三种调度器2. Spark任务调度
-
-
第三种调度器: Fair Scheduler公平调度器, CDH的软件默认使用的调度器.
第一个任务提交: 将所有的资源全部分配给第一个任务,保证第一个任务最快的完成.
第二个任务提交: 从第一个任务当中划分一部分资源出来, 给第二个任务进行执行.
- 优点: 可以快速的执行我们的一些大任务
- 缺点: 造成资源频繁的分配.
Yarn的调度器, Spark的任务调度, DAGSchedule, TaskSchedule, worder 131. 复习, Yarn三种调度器2. Spark任务调度
2. Spark任务调度
Spark任务调度模式是FIFO
各个RDD之间存在着依赖关系,这些依赖关系就形成有向无环图DAG,DAGScheduler对这些依赖关系形成的DAG进行Stage划分,划分的规则很简单,从后往前回溯,遇到窄依赖加入本stage,遇见宽依赖进行Stage切分。完成了Stage的划分。DAGScheduler基于每个Stage生成TaskSet,并将TaskSet提交给TaskScheduler。TaskScheduler 负责具体的task调度,最后在Worker节点上启动task。
-
首先,RDD Objects划分成DAG(有向无环图)
各个RDD之间存在着依赖关系, 这些依赖关系就形成有向无环图DAG.
- DAG Scheduler 职能如下
- 划分DAG成多个stage, 每个stage会形成一个taskSet.
- 记录缓存的RDD血统.
-
提交taskSet到Task Scheduler(不同模式有不听的底层任务调度器)
a. Spark-Cluster模式下是TaskScheduler
b. Yarn-Cluster模式下是YarnClusterScheduler
c. Yarn-Client模式下是YarnClientClusterScheduler
- 重新提交丢失的stage到TaskScheduler
- Task Scheduler(不知道stage是哪一部分RDD的数据)
- 每个TaskSet(Stage)生成一个taskManager
- 决定task任务执行的最佳位置
- 推测执行,哪些任务执行慢,就停止这些任务重新到新节点上执行
- 提交一组taskSet(tasks) + 参数
- 将丢失的taskSet重新提交给DAG Scheduler ==> 队列FIFO的原则执行推过来的stage.
- worker 是真正的执行任务的节点
- 每个分区开启一个进程(executor)
- 每个executor中, 开启一组线程, 执行一组taskSet, 每个task就是一个线程
- 实时报告metrics给老大
- 将计算结果返回给driver.