yarn即MapReduce 2.0 。相比MR 1.0,yarn架构中的各个角色职责单一,分工明确,在性能,稳定性上有所提升。
在yarn中有如下几个概念:
- ResourceManager
- NodeManager
- Secheduler
- ApplicationManager
- ApplicationMaster
- Container
ResourceManager和NodeManager对应实体的物理节点,分别映射到yarn的主节点和计算节点。
1、ResourceManager
ResourceManager节点的功能由Secheduler和ApplicationManager协调完成。
其中ApplicationManager职责如下
- 负责接收客户端提交的job
- 判断启动该job的ApplicationMaster所需的资源
- 监控ApplicationMaster的状态,在其失败的时候重启ApplicationMaster
Secheduler负责仅仅提供一个调度算法调度ApplicationManager提交的任务,他不提供失败重启和任何监控功能。调度算法可以自定义。yarn针对不同的场景提供了三种Secheduler实现:FIFO Scheduler ,Capacity scheduler,Fair Scheduler(请参照调度器详解)。
2、NodeManager
NodeManager对应集群中的计算节点,但是他的功能仅仅只是抽象本节点的资源(如cpu,内存,磁盘,网络)并且定时向ResourceManager的Secheduler汇报。
Container是一组资源的集合,一个container一般用来执行一个task。
ApplicationMaster是job的生命周期的管理者,负责整个job执行过程的监控。
前面提到ApplicationManager会判断启动ApplicationMaster所需的资源,之后提交给Secheduler,Secheduler将这些资源封装成一个Container,然后根据调度算法在某一个NodeManager上启动ApplicationMaster(当然它会消耗掉该NodeManager的资源)。
ApplicationMaster启动之后会计算job所需要的资源,并且向Secheduler申请这些资源,NodeManager分配完成这些任务的container之后,会由ApplicationMaster来监控这些container的状态,如果失败就回收资源重新申请,如果成功就释放资源,当任务执行完成之后汇报Secheduler,Secheduler回收资源并且向ResourceManager返回执行结果,整个任务处理完毕。