YARN详解
Posted 猿客进化
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了YARN详解相关的知识,希望对你有一定的参考价值。
YARN是Hadoop的核心主要模块之一,主要用于任务调度和集群资源管理的框架。YARN具有通用性,可作为很多计算框架(Spark、Stomach、MapReduce等)。YARN也是Hadoop1.x和Hadoop2.x的主要区别,将Hadoop1.X的MapReduce的集群资源管理功能赋予给YARN,可提高资源利用率、降低运营成本和数据共享。 |
以YARN为中心的共享集群资源架构如下图: |
1、YARN基本架构及组件 |
YARN集群总体是经典的主/从架构,主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成。YARN集群架构如图: |
(1)ResourceManager ResourceManager以后台进程的形式运行,负责集群资源进行统一管理和任务调度。 主要职责如下:
|
(2)NodeManager NodeManager是集群中每个节点上的资源和任务管理器,以后台进程的形式运行。会定时向ResourceManager汇报本节点和资源的健康情况。NodeManager不会监视任务,它仅监视Container中的资源使用情况。 |
(3)Container Container是YARN中资源分配的基本单位,封装了CPU和内存资源的一个容器。从实现上看,Container是一个Java抽象类,定义了资源信息。(这里我们只截取少量代码) public abstract class Container implements Comparable<Container>{ public Container(){} public static Container newInstance(.....,Resource resource){ container.setResource(resource); } } Container类中定义的一个重要属性类型是Resource,内存和CPU的资源信息正是存储Resource类中。Resource类也是一个抽象类,其中定义了内存和CPU核心数。(代码如下) public abstract class Resource implements Comparable<Resource>{ public Resource(){} public static Resource newInstance(......){ resource.setMemorySize(memory); resource.setVirtualCores(vCores); } } Container的大小取决于它所包含的资源量。一个节点上的Container数量,由节点空闲资源总量(总CPU数和总内存)决定。 YARN的NodeManager节点上拥有许多动态创建的Container。运行ApplicationMaster的Container是由ResourceManager向内部的资源调度器申请和启动。 Container类可看做数据库连接池中的连接,需要的时候申请,使用完毕后进行释放,而不需要每次独自创建。 |
(4)ApplicationMaster ApplicationMaster即应用程序管理者,主要负责应用程序的管理,以后台进程的形式运行。 一个应用程序对应一个ApplicationMaster。 用户提交一个应用程序时,会启动一个ApplicationMaster实例。应用程序完成后,ApplicationMaster会关闭自己并释放自己的Container。 |
总结: ResourceManager管理整个集群,NodeManager管理集群中单个节点,ApplicationMaster管理单个应用程序(集群中可能同时有多个应用程序在运行,每个应用程序都有各自的ApplicationMaster)。 |
以上是关于YARN详解的主要内容,如果未能解决你的问题,请参考以下文章