【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将继续发挥重要作用,推动着大数据处理技术的进步与创新。

相关文章
|
25天前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
111 6
|
25天前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
56 2
|
1天前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
15 4
|
20天前
|
存储 SQL 分布式计算
湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
【10月更文挑战第7天】湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
28 1
|
27天前
|
存储 分布式计算 资源调度
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
65 5
|
27天前
|
资源调度 数据可视化 大数据
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
32 4
|
27天前
|
XML 分布式计算 资源调度
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
125 5
|
26天前
|
SQL 分布式计算 Hadoop
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
50 3
|
27天前
|
XML 资源调度 网络协议
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
63 4
|
27天前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
61 4