一、什么是YARN
YARN是Hadoop2.0版本新引入的资源管理系统,直接从MR1演化而来。
核心思想:将MP1中JobTracker的资源管理和作业调度两个功能分开,分别由ResourceManager和ApplicationMaster进程来实现。
- 1)ResourceManager:负责整个集群的资源管理和调度。
- 2)ApplicationMaster:负责应用程序相关的事务,比如任务调度、任务监控和容错等。
YARN的出现,使得多个计算框架可以运行在一个集群当中。
1)每个应用程序对应一个ApplicationMaster。
2)目前可以支持多种计算框架运行在YARN上面比如MapReduce、Storm、Spark、Flink等。
YARN作为一个资源调度平台。三个组件-ResourceManager, NodeManager以及ApplicationMaster,它们各自的职责。
严格来说,YARN只包含两个组件,ResourceManager以及NodeManager。而ApplicationMaster只是一个YARN的客户端
二、YARN的基本架构
三、Yarn的各个组件
文件系统核心模块:
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据,一般都是使用两个,实现HA高可用
JournalNode:元数据信息管理进程,一般都是奇数个
DataNode:从节点,用于数据的存储
数据计算核心模块:
ResourceManager:Yarn平台的主节点,主要用于接收各种任务,通过两个,构建成高可用
NodeManager:Yarn平台的从节点,主要用于处理ResourceManager分配的任务
1、ResourceManager(RM)
ResourceManage 即资源管理,在YARN中,ResourceManager负责集群中所有资源的统一管理和分配,它接收来自各个节点(NodeManager)的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序(实际上是ApplicationManager)。
资源分配单位用“资源容器”(Contrainer)表示,Container是一个动态资源分配单位,它将内存、cpu、磁盘、网络等资源封装在一起,从而限定每个任务使用的资源量。
- 1)处理客户端请求;
- 2)启动或监控ApplicationMaster;
- 3)监控NodeManager;
- 4)资源的分配与调度。
RM包括Scheduler(定时调度器)和ApplicationManager(应用管理器)。
Schedular是一个资源调度器,它主要负责协调集群中各个应用的资源分配,保障整个集群的运行效率。
Scheduler的角色是一个纯调度器,它只负责调度Containers,不会关心应用程序监控及其运行状态等信息,它不做监控以及应用程序的状态跟踪,并且不保证会重启应用程序本身或者硬件出错而执行失败的应用程序。
ApplicationManager应用程序管理的功能如下:
- 主要负责接收job的提交请求,为应用分配第一个Container来运行ApplicationMaster
- 还有就是负责监控ApplicationMaster,并在遇到失败时重启ApplicationMaster运行的Container
2、NodeManager(NM)
NodeManager进程运行在集群中的节点上,每个节点都会有自己的NodeManager。Nodemanager整个集群有多个,负责每个节点上的资源和使用。NodeManager是一个slave服务:
- 它负责接收处理来自ResourceManager的资源分配请求,分配具体的Container给应用。
- 同时,它还负责监控并报告Container使用信息给ResourceManager。NodeManager只负责管理自身的Container,它并不知道运行在它上面应用的信息。负责管理应用信息的组件是ApplicationMaster
NodeManager的任务包括:
1)和ResourceManager保持同步
2)跟踪Node的状态
3)监控Container的生命周期,监控Container使用的资源
4)管理Distributed Cache
5)管理Container生成的日志
在NodeManager注册到ResourceManager之后,它就会不间断的向ResourceManager发送heartbeat,如果ResourceManager有需要它执行的指令,就作为响应发送给它。
在ResourceManager收到NodeManager的heartbeat并处理完之后,对应这个NodeManager的Container,就会在下一次ApplicationMaster给ResourceManager发送heartbeat时,作为ResourceManager的响应,发送给ApplicationMaster.
在NodeManager加载一个Container之前,它需要本地化需要的Resource,包括数据文件,可执行文件,shell script等。这些Resource可能有能够在不同用户之间共享的Resource,有能够在相同用户不同Application之间共享的Resource,以及只能够被这一个Container使用的Resource.
NodeManager也可以在ResourceManager的指示下,杀掉Container。当处于下面的几种场景中时,NodeManager就可能Kill掉一个Container:
ResourceManager告诉它,Application已经完成了
Scheduler决定抢占这个Container,并将它分配给另一个Application或者用户
NodeManager检测到,这个Container使用的资源已经超过了ContainerToken中指定的那些资源的限制
当一个Container完成时,NodeManager会清除它在本地存储的数据。当一个Application完成时,NodeManager会删除全部跟它相关的Container的数据。
3、ApplicationMaster
ApplicationMaster运行在Container中。
ApplicationMaster的主要作用是
向ResourceManager申请资源并和NodeManager协同工作来运行应用的各个任务,然后跟踪它们状态及监控各个任务的执行,遇到失败的任务还负责重启它。
管理YARN内运行的应用程序的每个实例。
功能:
数据切分
为应用程序申请资源并进一步分配给内部任务。
任务监控与容错
负责协调来自resourcemanager的资源,并通过nodemanager监视任务的执行和资源使用情况。
启动后做一下工作:
和ResourceManager保持连接,定期向ResourceManager发送heartbeat
计算一个Application需要的Resource
通过ResourceRequest的形式,跟ResourceManager沟通,让ResourceManager给它分配Container
和NodeManager沟通来加载Container
跟踪Container的状态
处理Container故障或者Node故障的问题
4、Container
资源分配单位用“资源容器”(Contrainer)表示,Container是一个动态资源分配单位,它将内存、cpu、磁盘、网络等资源封装在一起,从而限定每个任务使用的资源量。
Container是Yarn框架的计算单元,是具体执行应用task(如map task、reduce task)的基本单位。
Container和集群节点的关系是:一个节点会运行多个Container,但一个Container不会跨节点。
任何一个job或application必须运行在一个或多个Container中。在Yarn框架中,ResourceManager只负责告诉ApplicationMaster哪些Containers可以用,ApplicationMaster还需要去找NodeManager请求分配具体的Container。
四、 yarn的应用执行过程
- 1.client向yarn提交job,首先找ResourceManager分配资源,
- 2.ResourceManager开启一个Container,在Container中运行一个Application manager
- 3.Application manager找一台nodemanager启动Application master,计算任务所需的计算
- 4.Application master向Application manager(Yarn)申请运行任务所需的资源
- 5.Resource scheduler将资源封装发给Application master
- 6.Application master将获取到的资源分配给各个nodemanager
- 7.各个nodemanager得到任务和资源开始执行map task
- 8.map task执行结束后,开始执行reduce task
- 9.map task和 reduce task将执行结果反馈给Application master
- 10.Application master将任务执行的结果反馈pplication manager。