Yarn的概述
YARN 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,是 Hadoop2.x 版本中的一个新特性。
Yarn中的角色
Yarn也是主从结构,主要由ResourceManager、NodeManager、 ApplicationMaster和Container等几个组件构成。
ResourceManager 是根据任务的需要对集群资源的需求进行调度的 YARN 集群主控节点,负责协调和管理整个集群(所有 NodeManager)的资源。
NodeManager 是 YARN 集群当中真正资源的提供者,是真正执行应用程序的容器的提供者, 监控应用程序的资源使用情况(CPU,内存,硬盘,网络),并通过心跳向集群资源调度器 ResourceManager 进行汇报以更新自己的健康状态。同时其也会监督 Container 的生命周期管理,监控每个 Container的资源使用(内存、CPU 等)情况,追踪节点健康状况,管理日志和不同应用程序用到的附属服务(auxiliary service)。
AppMaster 对应一个应用程序,职责是:向资源调度器申请执行任务的资源容器,运行 任务,监控整个任务的执行,跟踪整个任务的状态,处理任务失败以异常情况。
Container 容器是一个抽象出来的逻辑资源单位。容器是由 ResourceManager Scheduler 服务动态分配的资源构成,它包括了该节点上的一定量 CPU,内存,磁盘,网络等信息,MapReduce 程序的所有 Task 都是在一个容器里执行完成的,容器的大小是可以动态调整的。Container是Yarn对计算机计算资源的抽象,它其实就是一组CPU和内存资源,所有的应用都会运行在Container中。
简单点来说:
- 客户端(Client):向整个集群提交MapReduce作业。
- YARN资源管理器(ResourceManager):负责调度整个集群的计算资源。
- YARN节点管理器(NodeManager):在集群的机器上启动以及监控container。
- MapReduce应用管理器(MRAppMaster): 调度某个作业的所有任务. 应用管理器和任务运行在container中, container由资源管理器调度, 由节点管理器管理。
Yarn资源调度流程
RM == ResourceManager NM == NodeManager
- 客户端将它的程序提交给Yarn。
- RM会给客户端返回一个jobid以及一个路径。
- 客户端会将对应的程序信息(jar包、切片信息、序列化文件)提交到对应的路径下。
- 提交完以后给RM返回一个确认。
- RM就会在存放提交信息的那台NodeManager上创建出来一个容器。启动我们的ApplicationMaster。
- ApplicationMaster会跟提交的切片信息和程序向RM注册,并申请容器。
- RM收到资源请求后,就去跟NM通信,NM就会在自身的节点上创建出需要的容器数量。
- ApplicationMaster就将相应的任务信息,发送到对应的NM节点上,并使用创建出来的container去运行Task。
- 运行ReduceTask。
- 等所有的Task都执行完以后,ApplicationMaster就向RM进行注销,RM就会回收资源。
注意:applicationmaster将监听每一个nodemanager执行的情况并随时汇报给resourcemanager,知道最后任务执行完成,将回收所有的资源,如果发现有任务执行失败,则由applicationmaster来协调,减轻了resourcemanager的负担,如果applicationmaster在运行过程中出问题,resourcemanager没有接收心跳后,会再在所有nodemanager节点中选择一个节点来启动applicationmaster来继续工作。