Spark中资源调度和任务调度


Spark比MR快的原因

1、Spark基于内存的计算

2、粗粒度资源调度

3、DAG有向无环图:可以根据宽窄依赖划分出可以并行计算的task

细粒度资源调度

MR是属于细粒度资源调度
优点:每个task运行的时候单独申请资源,资源被充分利用
缺点:task启动速度慢

粗粒度资源调度

Spark是属于粗粒度资源调度
优点:一次性将所有需要的资源都申请下来,task后续启动就不需要额外申请资源,启动速度非常快
缺点:会造成资源的浪费,因为只有当最后一个task运行完以后资源才会被释放

资源申请

1、使用spark-sumbit提交任务
2、在提交任务的节点启动Driver程序:Drive主要负责任务调度
3、Driver程序会向RM申请资源启动AM
4、RM会随机分配一台NM启动AM
5、AM又会向RM申请资源启动一批Executor
6、RM会分配资源在NM中启动Executor
7、Executor启动后会反向注册给Drive端

资源调度

1、当遇到一个action算子的时候,开始触发一个job进行任务调度
2、根据代码,构建DAG有向无环图
3、DAGScheduler会根据宽窄依赖切分Stage:Stage:是一组可以并行计算的Task
4、会将每个Stage以TaskSet的形式发送个TaskScheduler
5、TaskScheduler会将Task依次发送到Executor中执行

Task的重试机制
1、Task如果失败了,会由TaskScheduler重试3次
2、如果还是失败了,会由DAGScheduler将Stage重试4次
3、如果出现Shuffle file not found,DAGScheduler会去将上游的Stage进行重试

推测执行
当某个task执行太慢的时候,TaskSchedule会发送一个一模一样的task去执行,最终结果谁先执行完就以谁为准


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM