Yarn主要由以下几个组件组成
- ResourceManager:全局的进程
- NodeManager:运行在每个节点的进程
- Scheduler:是ResourceManger的一个组件
- Container:节点上一组CPU和内存资源
Resource Manager
- Resource Manager主要有两个组件:Scheduler和ApplicationManger
- Scheduler是一个资源调度器,主要负责协调集群中各个应用的资源分配,保证整个集群的运行效率。Scheduler的角色是一个纯调度器,它只负责调度Containers。
- ApplicationManager主要负责接收job的提交请求,为应用分配第一个Container来运行ApplicationMaster,还有就是负责监控ApplicationMaster,在遇到失败时重启ApplicationMaster运行的Container。
Node Manager
NodeManger进程运行在集群中的节点,每个节点都会有自己的NodeManager。
NodeManager是一个slave服务:它负责接收ResourceManager的资源分配请求,分配具体的Container给应用。同时,它还负责监控并报告Container使用信息给ResourceManager。通过和ResourceManager配合,NodeManager负责整个Hadoop集群中的资源分配工作。
Application Master
ApplicationMaster的主要作用是向ResourceManager申请资源并和NodeManager协同工作来运行应用的各个任务然后跟踪它们状态及监控各个任务的执行,遇到失败的任务还负责重启它。
Yarn request分析
应用提交过程分析
- 应用程序提交
- 启动应用的ApplicationMaster实例
- ApplicationMaster实例管理应用程序的执行
1、客户端程序向ResourceManager提交应用并请求一个ApplicationMaster实例
2、ResourceManager找到可以运行一个Container的NodeManager,并在这个Container中启动ApplicationMaster实例
3、ApplicationMaster向ResourceManager进行注册,注册之后客户端就可以查询ResourceManager获得自己ApplicationMaster的详细信息,以后就可以和自己的ApplicationMaster直接交互了
4、在平常的操作过程中,ApplicationMaster根据resource-request协议
向ResourceManager发送resource-request请求
5、当Container被成功分配之后,ApplicationMaster通过向NodeManager发送container-launch-specification信息来启动Container, container-launch-specification信息包含了能够让Container和ApplicationMaster交流所需要的资料
6、应用程序的代码在启动的Container中运行,并把运行的进度、状态等信息通过application-specific协议
发送给ApplicationMaster
7、在应用程序运行期间,提交应用的客户端主动和ApplicationMaster交流获得应用的运行状态、进度更新等信息,交流的协议也是application-specific协议
8、一但应用程序执行完成并且所有相关工作也已经完成,ApplicationMaster向ResourceManager取消注册然后关闭,用到所有的Container也归还给系统