ResourceManager
ResourceManager负责告诉ApplicationMaster哪些Containers可以用
- 组件: Scheduler (对application进行资源分配管理)
- 组件: ApplicationManager (接受client提交的job请求, 为application分配一个container作为ApplicationMaster)
ApplicationMaster
ApplicationMaster的主要作用是向ResourceManager申请资源
和NodeManager协同工作来运行应用的各个任务,然后跟踪它们状态及监控各个task的执行,遇到失败的task还负责重启它。
ResourceManager依然负责对整个集群的资源管理
但是在任务资源的调度方面只负责将资源封装为Container分配给ApplicationMaster的一级调度,
二级调度的细节将交给ApplicationMaster去完成,
这大大减轻了ResourceManager的压力,使得ResourceManager更加轻量。
NodeManager
- 负责接收ResourceManager的资源分配请求,通过和ApplicationMaster交互分配具体的Container给application。
- 负责监控并报告Container使用信息给ResourceManager。
接收ResourceManager的请求,分配Container给应用的某个任务
和ResourceManager交换信息以确保整个集群平稳运行。
ResourceManager就是通过收集每个NodeManager的报告信息来追踪整个集群健康状态的,
而NodeManager负责监控自身的健康状态。
管理每个Container的生命周期
管理每个节点上的日志
执行Yarn上面应用的一些额外的服务,比如MapReduce的shuffle过程
任务提交流程
- client端 向RM中的 ApplicationManager组件 发送提交Job请求
- RM 找到可以运行一个Container的NodeManager,并在这个Container启动AM实例
- AM向RM进行注册,RM告诉AM哪些NodeManger有资源,AM再去找NondeManger去申请资源请求分配Container
- NodeManager 将task的运行状态 发送给AM 用来监控
- application执行完成后, AM向RM取消注册然后关闭
参考文档:
阿里云博客: Hadoop Yarn详解