整调度流程为:
整个的调度流程为:
-
1.应用程序通client类向ResourceManager提交程序,Application运行所需要的入口类,出口类,运行的命令,运行所需要的cpu资源和内存资源,jar包资源。
-
2.ResourceManager通过内部的调度器,去集群中寻找资源,找到资源后与NodeManager进行通信,去启动相应的ApplicationMaster,AM会按照事先的规划将任务切分为许多的task任务。
-
3.ApplicationMaster之后向ResourceManager进行申请资源,RM会将资源进行动态的分配。
-
4.ApplicationMaster获得资源后会再将资源进一步分配给内部的task.
-
5.之后,ApplicationMaster会向NodeManager进行请求,让NM给启动起来Task,NM会把Task封装到Container中允许。
ResourceManager
整个集群只有一个,负责集群资源的统一管理和调度
- 处理客户端请求
- 启动监控ApplicationMaster
- 监控NodeManager
- 资源分配与调度
NodeManager
整个集群存在多个,负责单节点资源管理与使用
处理来自ResourceManager的命令
处理来自ApplicationMaster的命令
ApplicationMaster
每一个应用有一个,负责应用程序的管理
数据切分,申请资源,任务监控,任务容错
Container
对任务环境的抽象
Yarn的容错性
ResourceManager存在单点故障,基于Zookeeper实现HA,通常任务失败后,RM将失败的任务告诉AM,RM负责任务的重启,AM来决定如何处理失败的任务。RMAppMaster会保存已经运行完成的Task,重启后无需重新运行。
Yarn资源调度框架与调度器
Yarn采用的双层调度框架,RM将资源分配给AM,AM再将资源进一步分配给Task,资源不够时会为TASK预留,直到资源充足。在Hadoop1.0中我们分配资源通过slot实现,但是在Yarn中,直接分配资源。
资源调度器有:FIFO,Fair scheduler,Capacity scheduler
Yarn支持CPU和内存两种资源隔离,内存时决定生死的资源,CPU时影响快满的资源,内存隔离采用的是基于线程监控和基于Cgroup的方案。