Yarn的组成
ResourceManager和NodeManager组成了Yarn
(Master/Slave)组从结构 ,RM是主,NM是从

ResourceManager
ResourceManager里面还有两个组成部分:
1.调度器 Scheduler
2.应用程序管理器 Application Manager
Yarn组成介绍以及Hadoop的任务提交流程

1)Application Manager 应用程序管理器
AM主要是负责接收client的job请求,为应用分配第一个容器来运行我们的第一个Application Master,还有负责监控Application Master,并且在遇到失败的时候重启Application Master

2)Sheduler 调度器
调度器是为了让我们每个节点的资源充分的利用起来。调度器是一个纯调度器,值调度资源,不干其他事情。
调度器分为三种:
①容量调度器(Capacity Scheduler)
yarn-site.xml中默认的资源调度器。Capacity调度器,有一个专门的队列来运行小任务,但是为小任务专门设置一个队列会预先占用集群的资源,这就会导致大任务的执行时间会落后于使用队列调度器(FIFO)的时间。
②公平调度器(Fair Scheduler)
在公平调度器中,我们不会预先占用一定的系统资源,它会为Job动态的分配调用系统的资源,例如用户a,b都拥有自己的一个队列,a先启动一个job A,那么它会获得系统的全部资源,b再启动一个Job B,那么Job A继续执行,但是A、B各自获得集群一半的资源,当a用户再启动一个Job A2,那么之前的任务继续执行,Job A2获得之前A任务的一般资源,即总资源的1/4。
对于大任务和小任务,都是公平的,先启动一个大任务,那么会获得全部资源,再启动一个小任务,大任务和小任务各自获得一半的资源
③队列调度器(FIFO Scheduler)
FIFI Scheduler把引用按提交顺序排列成一个队列,在进行资源分配的时候,先给队列最前面的任务分配资源,满足任务资源后,再去分配下一个任务的资源。

Application Master

ApplicationMaster是一个Java程序,它的类名叫做MRAppMaster,所以进程名也加做:MRAppMaster
ApplicationMaster负责为任务申请容器,监控容器中的任务,用户没提交一个程序都会产生一个AM,AM是任务的一个管理者。
Application Master的主要功能:
①与RM调度器RS协商获取执行资源
②与NM通信,启动任务,停止任务
③监控旗下所有任务的执行状态,如果失败,会重新启动任务来申请资源

容器(Container)
Container是Yarn的资源抽象,它封装了某个节点的多维度资源,如内存,CPU,磁盘,IO。容器把节点的资源切分出来单独的运行任务。

NodeManager
NodeManager是运行在单个节点上的代理,它管理Hadoop集群中单个计算节点,功能包括与ResourceManager保持通信,管理Container的生命周期、监控每个Container的资源使用(内存、CPU等)情况、追踪节点健康状况、管理日志和不同应用程序用到的附属服务等。

NodeManager是YARN中单个节点的代理,它需要与应用程序的ApplicationMaster和集群管理者ResourceManager交互;它从ApplicationMaster上接收有关Container的命令并执行(比如启动、停止Contaner);向ResourceManager汇报各个Container运行状态和节点健康状况,并领取有关Container的命令(比如清理Container)。

Hadoop在1.0版本由HDFS、MR组成
Hadoop在2.0版本由HDFS、MR、Yarn组成

Hadoop的任务提交了流程:
Yarn组成介绍以及Hadoop的任务提交流程
1、向resourcemanager申请一个新的application ID,用于MapReduce作业的ID

2、检查作业的输出。如果没有指定输出或者输出路径已经存在,则不提交作业,MapReduce程序抛异常

3、计算作业的输入切片。如果不能计算切片(比如输入路径不存在等),不提交作业,MR程序抛异常。

4、拷贝执行作业需要的资源到共享文件系统的以作业ID命名的目录中,这些资源包括作业的jar包,配置文件,计算好的输入切片。作业的jar包有一个很高的副本数mapreduce.client.submit.file.replication指定,默认值是10,这样当nodemanager如果运行作业中的任务,会有很多副本可以访问。

5、调用resourcemanager的submitApplication方法提交作业。

6、YARN为请求分配一个容器,resourcemanager通过容器所在节点上的nodemanager在该容器中启动application master进程。

7、MapReduce作业的application master是一个java app,主入口类是MRAppMaster。从HDFS抽取客户端计算好的输入切片,为每一个切片创建一个map任务对象,以及一定数量的reduce任务对

8.application master会为作业中所有的map任务以及reduce任务向调度器请求创建容器。为map任务的请求会首先进行并且相对于reduce任务请求有更高的优先级。当map任务完成率达到了5%之后才会为reduce任务发送容器请求。(reduce任务可以运行于集群中的任意位置,而map任务会有本地读取数据的限制。移动计算而不是数据。数据本地。次之为机架本地)。

9.一旦resourcemanager在一个节点上的一个容器中为一个任务分配了资源,application master与nodemanager通信,启动容器。任务通过一个java app来执行,该app的主入口类是YarnChild。在它可以开始任务的执行之前,它要本地化任务需要的资源,包括jar包,配置文件,以及分布式缓存中存储的其他共享文件。最后,它开始运行map任务或者reduce任务。

10.当作业的最后一个任务完成并通知application master,AM就更改作业的状态为”successfully”。作业就打印信息告知客户端,客户端waitForCompletion方法返回。此时也会在控制台打印作业的统计信息和计数器的信息。作业完成,application master所在容器和任务所在容器销毁工作状态(中间的输出结果删除)。作业的信息被作业历史服务器存档以备以后查询使用。

相关文章: