YARN整体上仍然是Master/Slave结构,在整个资源管理框架中,ResourceManager为Master,NodeManager为Slave,ResouceManager负责对各个NodeManager上的资源进行统一管理和调度。当用户提交一个应用程序时,须要提供一个用以跟踪和管理这个程序的ApplicationMaster,它负责向ResourceManger申请资源,并要求NodeManager启动能够占用必定资源的任务。html
Hadoop2.0 YARN包含如下实体,能够看图:node
ResourceManager(RM):全局的资源管理器,负责整个系统的资源管理和分配安全
NodeManager(NM):每一个节点上的资源和任务管理器,定时向RM汇报本节点上的资源使用状况和各个Container的运行状态,接收并处理来自AM的Container启动/中止等各类请求网络
ApplicationMaster(AM):用户提交的每一个应用程序均包含一个AM,主要功能与RM调度器协商以获取资源,进一步分配给内部的任务,与NM通讯启动/中止任务,监控任务的运行状态架构
Container:是YARN中资源的抽象,封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。当AM向RM申请资源时,RM为AM返回的资源即是用Container表示的。框架

结合YARN架构图描述一个资源请求的流程:运维
- NodeManager向ResourceManager注册各机器资源
- 客户端向ResouceManager提交做业
- ApplicationMaster向ResouceManager请求资源,并判断是否知足须要
- ResouceManager以Container的形式将资源反馈给ApplicationMaster
- Container做为资源单元保证做业隔离运行
关于Hadoop2.0的安装能够参考这篇博文,Hadoop 2.0安装以及不停集群加datanode,下面对HADOOP2.0(HDFS2)以及YARN设计的亮点进行总结:分布式
- 1.针对Hadoop1.0中单个NameNode制约HDFS的扩展性问题,Hadoop2.0提出了HDFS Federation,它让多个NameNode分管不一样的目录进而实现访问隔离和横向扩展。对于运行中NameNode的单点故障,经过NameNode热备方案(NameNode HA)实现。
- 2.在Hadoop1.0中,JobTracker由资源管理和做业控制两部分组成,对JobTracker赋予的功能过多而形成负载太重,从设计角度上看,Hadoop未可以将资源管理相关功能与应用程序相关功能非开,形成Hadoop1.0难以支持多种计算框架。而YARN经过将资源管理和应用程序管理两部分分剥离开,分别由ResouceManager和ApplicationMaster负责,其中,ResouceManager专管资源管理和调度,而ApplicationMaster则负责与具体应用程序相关的任务切分、任务调度和容错等。
- 3.在ResouceManager中,ClientRMService和AdminService两个服务分别负责处理来自普通用户和管理员的请求,须要注意的是,之因此让这两类请求经过两个不一样的通讯通道发送个ResourceManager,是由于要避免普通用户请求过多致使管理员请求被阻塞而迟迟得不处处理。
- 4.JDK中自带一个RPC框架-RMI,之因此不直接使用该框架,主要是考虑到RPC是Hadoop最底层最核心的模块之一,保证其轻量级、高性能和可控性显得尤其重要,而RMI重量级过大且用户可控之处太少(如网络链接、超时和缓冲等均难以定制或者修改),Doug Cutting在Hadoop最初设计时就是这样描述Hadoop RPC设计动机的。
- 5.整体来讲Hadoop2.0中的HDFS和YARN均采用了基于共享存储的HA解决方案,即Active Master不断将信息写入一个共享存储系统,而Standby Master则不断读取这些信息,以与Active Master的内存信息保持同步。当须要主备切换时,选中的Standby Master需先保证信息彻底同步后,再将本身的角色切换至Active Master。目前而言,经常使用的共享存储系统有如下几个:Zookeeper,NFS,HDFS,Bookeeper和QJM。HA架构均分为手动模式和自动模式,其中手动模式是指由管理员经过命令进行主备切换,这一般用于服务升级;自动模式可下降运维成本,但存在潜在危险。
- 6.Zookeeper设计的目的并非数据存储,但他的确能够安全可靠地存储少许数据以解决分布式环境下多个服务之间的数据共享问题。
- 7.解决HA问题需考虑如下几个问题:脑裂和切换对外透明。脑裂是指在主备切换时,因为切换不完全或其余缘由,致使客户端和Slave误觉得出现两个Active Master,最终使得整个集群处于混乱状态。一般采用隔离机制解决脑裂问题。为了保证整个切换是对外透明的,Hadoop应保证全部客户端和Slave能自动重定向到新的Active Master上,一般是经过若干次尝试链接旧Master不成功后,再从新尝试新Master完成的,整个过程有必定的延时,能够自行设置相关参数。
- 8.ResourceManger并不会保存已经分配给 每一个ApplicationMaster的资源信息和每一个NodeManage的资源使用信息,这些都可经过相应的心跳汇报机制重构出来。正由于如此,ResouceManager HA的实现是很是轻量的。
- 9.Hadoop调度器支持多个队列多用户,这种调度器容许管理员按照应用需求对用户或者应用程序分组,并为不一样的分组分配不一样的资源量,同时经过添加各类约束防止单个用户或者应用程序独占资源,进而可以知足各类QoS需求,典型的表明是Yahoo!的Capacity Scheduler和Facebook的Fair Scheduler。
- 10.YARN的内存资源隔离,默认采用线程监控的方案,提供灵活的控制策略,具体能够看这篇博文,Hadoop YARN资源隔离技术。
参考:oop
《Hadoop技术内幕--深刻解析YARN架构设计与实现原理》性能
《大规模分布式系统架构与设计实践》