YARN产生背景
a)JobTracker单点故障
b)JobTracker承受的访问压力大,影响系统的扩展性
c)不支持MapReduce之外的计算框架,比如storm、spark、flink
什么是YARN
YARN是Hadoop2.0版本引进的资源管理系统,直接从MR1演化而来。
核心思想:将MR1中的JobTracker的资源管理和作业调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现。
ResourceManager:负责整个集群的资源管理和调度
ApplicationMaster:负责应用程序相关事务,比如任务调度、任务监控和容错等。
YARN的出现,使得多个计算框架可以运行在同一个集群之中。
1. 每一个应用程序对应一个ApplicationMaster。
2. 目前可以支持多种计算框架运行在YARN上面,比如MapReduce、storm、Spark、Flink。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
YARN的基本架构
从YARN的架构来看,它主要由ResourceManager、 NodeManager、ApplicationMaster 和 Container组成
ResourceManager(RM)
RM是一个全局的资源管理器,负责整个系统的 资源管理和分配。它主要由两个组件构成:调度器(Schedule)和应用程序管理器(Application Manager, ASM)
YARN分层结构的本质是ResourceManager。这个实体控制整个集群并管理应用程序向基础计算资源的分配。ResourceManager将各个资源部分(计算、内存、带宽等)精心安排给基础NodeManager(YARN的每节点代理)。ResourceManager还与ApplicationMaster一起分配资源,与NodeManager一起启动和监视它们的基础应用程序。在此上下文中,ApplicationMaster承担了以前的TaskTracker的一些角色,ResourceManager承担了JobTracker的角色。
a)调度器(Schedule)
调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。该调度器是一个“纯调度器”,它不再从事任何与具体应用程序相关的工作。
b)应用程序管理器(Application Manager)
应用程序管理器负责管理整个系统中所有的应用程序,包括应用程序提交、调度协调资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它。
ApplicationMaster(AM)
ApplicationMaster管理一个在YARN内运行的应用程序的每个实例。ApplicationMaster负责协调来自ResourceManager的资源,并通过NodeManager监视容器的执行和资源的使用(cpu、内存等资源分配)。
请注意,尽管目前的资源更加传统(CPU核心、内存),但未来会带来基于手头任务的新资源类型(比如图形处理单元,或专用处理设备)。从YARN角度来讲,ApplicationMaster是用户代码因此存在潜在安全问题。YARN假设ApplicationMaster存在错误或者甚至是恶意的,因此将它们当做无特权的代码对待。
NodeManager(NM)
NodeManager管理一个YARN集群中的每个节点。NodeManager提供针对集群中每个节点的服务,从监督对一个容器的终身管理到监视资源和跟踪节点健康。MRv1通过插槽管理Map和Reduce任务执行,而NodeManager管理抽象容器,这些容器代表着可供一个特定应用程序使用的针对每个节点的资源。YARN继续使用HDFS层。它的主要NameNode主要用于元数据服务,而DataNode用于分散在一个集群中的复制存储服务。
NM是每个节点上的资源和任务管理器。一方面,它会定时地向RM汇报本节点上的资源使用情况和各个Container运行状态;另一方面,它接收并处理来自AM的 Container 启动/停止等各种请求。
Container
Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存,CPU,磁盘,网络等。当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。
YARN会为每个任务分配一个Container,且该任务只能用该Container中描述的资源。
要使用一个YARN集群,首先需要来自包含一个应用程序的客户请求。
ResourceManager协商一个容器的必要资源,启动一个ApplicationMaster来表示已经提交的应用程序。通过使用一个资源请求协议,ApplicationMaster协商每个节点上供应程序使用的资源容器。执行应用程序时,ApplicationMaster监视容器,直到完成。当应用程序完成时,ApplicationMaster从ResourceManager注销其容器,执行周期就完成了。
通过以上的描述,应该明确的一点是,旧的Hadoop架构收到了JobTracker的高度约束,JobTracker负责整个集群的资源管理和作业调度。新的YARN架构打破了这种模型,允许一个新ResourceManager管理跨应用程序的资源使用,ApplicationMaster负责管理作业的执行。这一更改消除了这一瓶颈,还改善了Hadoop集群的扩展能力,使其扩展能力比以前大得多。此外,不同于传统的MapReduce,YARN允许使用Message Passing Interface 等标准通信模式,同时执行各种不同的编程模型,包括图形计算、迭代式处理、机器学习和一般集群计算。
YARN的工作原理
MapReduce On YARN
MapReduce On YARN
a)YARN负责资源管理和调度
b)ApplicationMaster负责任务管理
MapReduce ApplicationMaster
a)MRAppMaster
b)每个MapReduce作业启动一个MRAppMaster
c)MRAPPMaster负责任务切分、任务调度、任务监控、容错等
MRAPPMater任务调度
a)YARN将资源分配给MR APPMaster
b)MRAPPMaster进一步将资源分配给内部任务
MRAPPMaster容错
a)MRAPPMaster运行失败后,由YARN重新启动
b)任务运行失败后,MRAPPMaster重新申请资源
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
YARN HA
ResourceManager HA 由一对 Active,Standby节点构成,通过RMStataStore存储内部数据和主要应用的数据及标记。
目前支持的可替代的 RMStateStore实现有:基于内存的 MemoryRMStateStore,基于文件系统的FileSystemRMStateStore,及基于Zookeeper的ZKRMStateStore。
ResourceManager HA的架构模式同NameNode HA的架构模式基本一致,数据共享由RMStateStore,而ZKFC称为ResourceManager进程的一个服务,非独立存在。