YARN集群架构

1.组成

YARN集群总体上是经典的主/从(Master/Slave)架构,主要由ResourceManager、NodeManager、ApplicationMaster和Container组成。

2.集群架构图

在这里插入图片描述

3.各个组件的解析

1.ResourceManager

以后台进程的形式运行,负责对集群资源进行统一管理和任务调度。主要职责:
1.接受来自客户端(client)的请求
2.启动和管理各个应用程序的ApplicationMaster
3.接收来自ApplicationMaster的资源申请,并为其分配Container
4.管理NodeManager,接收来自NodeManager的资源分配和节点健康情况汇报

2.NodeManager

集群中每个节点的资源和任务管理器,以后台进程的形式运行。他会定时向ResourceManager汇报本节点的资源(内存、CPU)使用情况和各个Container的运行状态,同时会接收并处理来自ApplicationMaster的Container启动/停止等请求。NodeManager不会监视任务,它仅仅监听Container中的资源使用情况,例如,如果一个Container消耗的内存比最初分配的多,他就会结束该Container。

3.Task

应用程序的具体执行任务,一个应用程序可能会有多个任务。

4.Container

YARN中资源分配的基本单位,封装了CPU和内存资源的一个容器,相当于是一个Task运行环境的抽象。从实现上看,Container是一个Java抽象类,定义了资源信息。应用程序的Task会发布到Container中运行,从而限定Task使用的资源量。Container的源码如下:

public abstract class Container implements Comparable<Container> {
    public Container() {
    }

    @Private
    @Unstable
    public static Container newInstance(ContainerId containerId, NodeId nodeId, String nodeHttpAddress, Resource resource, Priority priority, Token containerToken) {
        Container container = (Container)Records.newRecord(Container.class);
        container.setId(containerId);
        container.setNodeId(nodeId);
        container.setNodeHttpAddress(nodeHttpAddress);
        //Resource是Container类中定义的一个重要的属性类型,内存和CPU的资源信息就是存储在Resource类中。Resource类也是一个抽象类,其中定义了内存和CPU核心数
        container.setResource(resource);
        container.setPriority(priority);
        container.setContainerToken(containerToken);
        return container;
    }

Resource类的源码如下:

public abstract class Resource implements Comparable<Resource> {

  @Public
  @Stable
  public static Resource newInstance(int memory, int vCores) {
    Resource resource = Records.newRecord(Resource.class);
    resource.setMemory(memory);
    resource.setVirtualCores(vCores);
    return resource;
  }

Container的大小取决于她所包含的资源量。一个节点上的Container数量由节点空闲资源总量(总CPU数和总内存数)决定的。

5.ApplicationMaster

应用程序管理者,主要负责应用程序的管理,以后后台的形式运行。为应用程序向ResourceManager申请资源(CPU、内存),并将资源分配给所管理应用程序的Task。
一个应用程序对应一个ApplicationMaster,在用户提交一个应用程序时,会启动一个ApplicationMaster实例,ApplicationMaster会启动所需要的Task来完成他负责的应用程序,并监视Task运行状态和运行进度。应用程序运行完成后,ApplicationMaster会关闭自己并释放自己的Container,以便其他应用程序的ApplicationMaster或Task转移至Container中运行,提高资源利用率。

总结:

ResourceManager管理整个集群,NodeManager管理集群中单个节点,ApplicationMaster管理单个应用程序

4.运行过程

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_48929324/article/details/114434278
今日推荐