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以后台进程的形式运行,负责集群资源进行统一管理和任务调度。

主要职责如下:

  • 接收来个Client的请求

  • 启动和管理各个应用程序的ApplicationMaster

  • 接收来自ApplicationMaster的资源申请,并为其分配Container

  • 管理NodeManager,接收来自NodeManager的资源和节点健康情况汇报

(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详解的主要内容,如果未能解决你的问题,请参考以下文章

Yarn 详解

yarn集群学习详解

Yarn架构详解

YARN 生产详解

YARN 架构详解

扩展Yarn资源模型详解1