【Hadoop Yarn】YARN 基础架构分析

简介: 【4月更文挑战第7天】【Hadoop Yarn】YARN 基础架构分析

image.png

YARN(Yet Another Resource Negotiator)基础架构分析

YARN作为Hadoop生态系统中的一个核心组件,负责集群资源的管理和作业调度。它的出现极大地增强了Hadoop集群的灵活性和扩展性,使得不仅仅是MapReduce作业,还可以支持多种计算框架的运行,例如Apache Spark、Apache Flink等。在本文中,我们将对YARN的基础架构进行深入分析,包括其核心组件、工作原理以及关键代码片段。

1. YARN的核心组件

YARN主要由以下几个核心组件组成:

  1. ResourceManager(资源管理器):集群中的一个主节点,负责整个集群的资源管理和作业调度。ResourceManager有两个主要的组件:Scheduler(调度器)和ApplicationsManager(应用程序管理器)。

  2. NodeManager(节点管理器):运行在每个集群节点上的代理服务,负责监控节点资源的使用情况,并与ResourceManager通信以报告节点的可用资源。

  3. ApplicationMaster(应用程序主管):每个应用程序在集群中启动时,都会有一个对应的ApplicationMaster被分配。ApplicationMaster负责与ResourceManager协商资源,并与NodeManager协调容器的启动、监控和状态报告。

  4. Container:YARN中的资源抽象,用来封装运行应用程序所需的资源,如内存、CPU等。Container是YARN中资源分配的基本单位。

2. YARN的工作原理

YARN的工作原理可以简单概括为资源管理和作业调度。当一个应用程序提交到YARN集群时,ResourceManager会为该应用程序分配一个唯一的应用程序ID,并为其启动一个对应的ApplicationMaster。ApplicationMaster负责与ResourceManager协商资源,并与NodeManager协调容器的启动、监控和状态报告。NodeManager负责监控节点资源的使用情况,并与ResourceManager通信以报告节点的可用资源。ResourceManager根据集群的资源状况为应用程序分配容器,容器是运行在节点上的应用程序实例的抽象。应用程序在容器中运行,并将状态信息报告给ApplicationMaster。当应用程序完成或失败时,ApplicationMaster通知ResourceManager释放已分配的资源。

3. ResourceManager

ResourceManager是YARN的核心组件之一,负责整个集群的资源管理和作业调度。它主要有两个子组件:Scheduler(调度器)和ApplicationsManager(应用程序管理器)。

Scheduler

Scheduler负责将集群中的资源分配给不同的应用程序。它有不同的调度器实现,可以根据需求选择不同的调度算法,如容量调度、公平调度等。Scheduler通过与NodeManager通信来确定可用资源,并根据调度策略将这些资源分配给不同的应用程序。

// Scheduler.java

public abstract class Scheduler {
   
   
    public abstract void allocateContainers(Application application, ResourceRequest resourceRequest);
    public abstract void releaseContainers(Application application, List<ContainerID> containers);
}

ApplicationsManager

ApplicationsManager负责管理集群中运行的应用程序。它接收客户端提交的应用程序,并为每个应用程序分配一个唯一的应用程序ID,并为其启动一个对应的ApplicationMaster。

// ApplicationsManager.java

public class ApplicationsManager {
   
   
    public ApplicationID submitApplication(Application application) {
   
   
        // 为应用程序分配唯一的ID
        ApplicationID applicationID = generateApplicationID();
        // 创建对应的ApplicationMaster
        ApplicationMaster applicationMaster = createApplicationMaster(application, applicationID);
        // 启动ApplicationMaster
        applicationMaster.start();
        return applicationID;
    }

    private ApplicationID generateApplicationID() {
   
   
        // 生成唯一的应用程序ID
    }

    private ApplicationMaster createApplicationMaster(Application application, ApplicationID applicationID) {
   
   
        // 创建对应的ApplicationMaster
    }
}

4. NodeManager

NodeManager是YARN的另一个核心组件,运行在每个集群节点上,负责监控节点资源的使用情况,并与ResourceManager通信以报告节点的可用资源。

NodeManager启动

NodeManager启动时,会初始化节点资源信息,并启动RPC服务,以便与ResourceManager和ApplicationMaster通信。

// NodeManager.java

public class NodeManager {
   
   
    public void start() {
   
   
        // 获取节点资源信息
        NodeResources nodeResources = getNodeResources();
        // 启动RPC服务
        RPCServer rpcServer = new RPCServer();
        rpcServer.start();
        // 处理请求
        while (true) {
   
   
            Request request = rpcServer.receiveRequest();
            if (request.getType() == RequestType.START_CONTAINER) {
   
   
                Container container = request.getContainer();
                startContainer(container);
            } else if (request.getType() == RequestType.STOP_CONTAINER) {
   
   
                ContainerID containerID = request.getContainerID();
                stopContainer(containerID);
            }
        }
    }
}

5. ApplicationMaster

ApplicationMaster是YARN的另一个核心组件,负责与ResourceManager协商资源,并与NodeManager协调容器的启动、监控和状态报告。

ApplicationMaster启动

ApplicationMaster启动时,会向ResourceManager注册,并开始协商资源分配。

// ApplicationMaster.java

public class ApplicationMaster {
   
   
    public void start() {
   
   
        // 向ResourceManager注册
        registerWithResourceManager();
        // 协商资源分配
        negotiateResourceAllocation();
    }

    private void registerWithResourceManager() {
   
   
        // 向ResourceManager注册
    }

    private void negotiateResourceAllocation() {
   
   
        // 协商资源分配
    }
}

结论

通过对YARN的基础架构分析,我们了解了其核心组件、工作原理以及关键代码片段。YARN作为Hadoop生态系统中的一个重要组件,为大规模数据处理提供了强大的支持,同时也为不同类型的计算框架提供了统一的资源管理和作业调度平台。随着大数据技术的不断发展,YARN将继续发挥重要作用,推动着大数据处理技术的进步与创新。

相关文章
|
1月前
|
SQL 分布式计算 Hadoop
hadoop数据查询和分析
【5月更文挑战第9天】
22 1
|
1天前
|
资源调度 分布式计算 监控
YARN的基本架构
【6月更文挑战第19天】YARN的基本架构
16 10
|
3天前
|
存储 分布式计算 Hadoop
Hadoop是一个强大的分布式系统基础架构
【6月更文挑战第17天】Hadoop是一个强大的分布式系统基础架构
15 1
|
5天前
|
资源调度 分布式计算 Hadoop
实时计算 Flink版产品使用问题之yarn session模式中启动的任务链接是http IP,想把IP映射为主机hadoop,该怎么操作
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
8天前
|
分布式计算 Hadoop Java
使用Hadoop MapReduce分析邮件日志提取 id、状态 和 目标邮箱
使用Hadoop MapReduce分析邮件日志提取 id、状态 和 目标邮箱
|
25天前
|
资源调度 分布式计算 Hadoop
Hadoop Yarn 核心调优参数
这是一个关于测试集群环境的配置说明,包括3台服务器(master, slave1, slave2)运行CentOS 7.5,每台有4核CPU和4GB内存。集群使用Hadoop 3.1.3,JDK1.8。Yarn核心配置涉及调度器选择、ResourceManager线程数、节点检测、逻辑处理器使用、核心转换乘数、NodeManager内存和CPU设置,以及容器的内存和CPU限制。配置完成后,需要重启Hadoop并检查yarn配置。
|
25天前
|
SQL 分布式计算 资源调度
Hadoop Yarn 配置多队列的容量调度器
配置Hadoop多队列容量调度器,编辑`capacity-scheduler.xml`,新增`hive`队列,`default`队列占总内存40%,最大60%;`hive`队列占60%,最大80%。配置包括队列容量、用户权限和应用生存时间等,配置后使用`yarn rmadmin -refreshQueues`刷新队列,无需重启集群。多队列配置可在Yarn WEB界面查看。
|
30天前
|
分布式计算 资源调度 Spark
Spark的一些问题汇总 及 Yarn与Spark架构的对比
Spark的一些问题汇总 及 Yarn与Spark架构的对比
24 0
|
1月前
|
传感器 数据采集 安全
物联网的五层架构分析
物联网五层架构,包括感知层、网络层、数据层、应用层和业务层,扮演着关键的角色。
36 2
|
1月前
|
存储 SQL 分布式计算
Hadoop分布式架构
【5月更文挑战第8天】Hadoop分布式架构
24 4