前言在大数据生态系统中Hadoop 的YARN (Yet Another Resource Negotiator)是支撑起整个计算框架如 MapReduce、Spark、Flink 等的资源调度中枢。如果将 HDFS 比作大数据的“硬盘”存储那么 YARN 就是大数据的“操作系统”资源调度。了解 YARN 的架构设计、组件的分工协同以及它如何将计算任务转化为分布式执行的容器Container是每一位大数据开发与运维人员进阶的必经之路。本文将结合系统架构图和任务执行时序图深度解析 YARN 的运行机制并附上实用的 Shell 运维命令。一、 YARN 整体架构设计YARN 采用了经典的Master/Slave主从架构突破了 Hadoop 1.x 中 MapReduce 紧耦合的限制实现了资源管理与计算框架的解耦。它主要由四大核心组件构成参考架构图ResourceManager (RM)全局的“大管家”负责整个集群的资源分配和调度。NodeManager (NM)每个计算节点上的“小管家”负责单个节点上资源CPU、内存的管理和容器Container的生命周期维护。ApplicationMaster (AM)每个任务如一个 Spark Job的“项目经理”负责统筹该任务的生命周期申请资源、协调执行、监控进度。Container资源分配的最基本单元封装了 CPU、内存等资源是任务运行的实际载体。二、 核心组件深度解读1. ResourceManager (RM) —— 全局调度中心RM 是集群中的唯一主节点负责整个 YARN 集群的资源管理和分配。其内部主要由两个重要组件构成Scheduler调度器负责将资源Container分配给各个应用程序。YARN 提供了多种策略常用的包括Capacity Scheduler容量调度器将资源划分为若干个队列队列内部采用 FIFO先进先出策略队列之间资源共享。适合多租户、资源隔离要求高的生产环境。Fair Scheduler公平调度器所有运行的 Job 动态平均分配资源。当只有一个 Job 时它占用全部资源当有新的 Job 提交时资源会进行抢占式分配保证每个 Job 都能得到公平的待遇。适合资源波动大、要求低延迟的场景。ApplicationsManager (AsM)负责管理整个集群中所有应用程序的提交与 Scheduler 协商资源并负责启动和监控 ApplicationMaster。2. ApplicationMaster (AM) —— 任务的“项目经理”每当用户提交一个任务如 MapReduce JobRM 就会在某个节点上启动一个ApplicationMaster实例。AM 会向 RM 申请执行任务所需的计算资源Container。获得资源后AM 与对应的 NodeManager 通信要求其启动具体的 Task如 Map Task 或 Reduce Task。AM 全程跟踪监控这些 Task 的运行状态。如果某 Task 失败AM 会重新向 RM 申请资源并重启它。当所有 Task 执行完毕AM 自动注销并释放自身占用的 Container。3. NodeManager (NM) —— 节点的“节点代理”每个计算节点Worker Node上都运行着一个 NM。它的职责类似于 HDFS 中的 DataNode。RM 只负责宏观调度具体的Container 启动、资源隔离、监控全部由 NM 负责。NM 会定期向 RM 汇报本节点的资源使用情况心跳机制使 RM 能够掌握整个集群的负载状态。4. Container —— 运算的“胶囊”Container 是 YARN 中资源分配的最小计算单元。它是动态分配的一个节点可以运行多个 Container分别执行不同的 Task。目前 Container 主要封装了CPU和内存两种资源。未来可能会支持 GPU、网络带宽等。特别提示AM 向 RM 申请资源时RM 只告诉 AM “哪些 Container 可用”。真正的资源“启动”授权还需要 AM 拿着这些分配好的标记去向具体的 NodeManager 请求启动。三、 YARN 应用提交与执行全流程详解结合您提供的【任务提交流程图】一个应用程序如 MapReduce 或 Spark Job从提交到最终运行完成共经历了 7 个核心步骤提交任务 (Client - RM)Client客户端向 YARN 的ResourceManager发起应用程序提交请求。启动 AM (RM - NM)RM 接收到请求后在集群中找到一个空闲的 NodeManager在分配的 Container 中启动一个ApplicationMaster (AM)进程。AM 注册并申请资源 (AM - RM)AM 启动后首先向 RM 注册然后向 RM 的 Scheduler 申请运行具体 Task 所需的系统资源。分配资源 (RM - AM)Scheduler 经过计算将具体的资源多个 Container 列表封装好返回给 AM。启动任务容器 (AM - NM)AM 拿到资源列表后与指定的NodeManager通信要求它们启动具体的 Container 来执行 Task。执行任务与状态汇报 (NM/Task - AM)各个 NodeManager 在分配好的 Container 中启动Map Task或Reduce Task等具体计算任务。同时各个 Task 通过 RPC 协议向 AM 汇报自己的进度和状态AM 随时掌握全局进度可在 Task 失败时重新启动。任务完成与注销 (AM - RM)当所有 Task 执行完毕AM 将最终的执行结果返回给 Client并向 RM 的 ApplicationsManager 注销关闭自己并释放占用的资源。四、 YARN Shell 日常运维命令实战掌握 YARN 的命令行操作对于排查任务故障、管理队列和集群状态至关重要。以下操作均基于 Hadoop 环境。1. YARN Application应用管理命令排查某个运行缓慢或卡死的 Spark 或 MapReduce 任务时最常用的命令# 查看指定 Application 的详细运行状态含进度 yarn application -status application_1578297910271_66111 # 强制终止一个正在运行或卡死的 Application yarn application -kill application_1578297910271_66111 # 查看指定 Application 内部的 Attempt尝试列表 yarn applicationattempt -list application_1578297910271_66111 # 查看 Application 内部特定 Container 的状态详情 yarn application -status container_e55_1578297910271_66111_01_0000012. YARN Node节点状态监控用于排查某个 Worker 节点是否挂掉或者资源是否爆满# 列出集群中所有 NodeManager 的状态健康、不健康、已退役 yarn node -list # 查看特定节点如 slave003的详细状态包括 CPU、内存的使用量 yarn node -status slave003:451173. YARN Queue队列管理用于查看各个资源队列的容量、运行中的任务数# 查看名为 dev 的队列的配置和状态 yarn queue -status dev4. YARN RMAdmin集群管理高级命令这是 YARN 运维人员最重要的命令当我们在capacity-scheduler.xml中调整了队列比例或者在yarn-site.xml中加入/移除了计算节点时不需要重启整个 YARN 集群直接使用 rmadmin 刷新配置即可生效。常用参数解读-refreshQueues重新加载队列的 ACL、状态和调度器属性配置。-refreshNodes刷新节点白名单/黑名单文件无需重启即可动态上下线节点。-refreshSuperUserGroupsMappings刷新超级用户组映射配置。-refreshUserToGroupsMappings刷新用户到组的映射配置。-getGroups [username]获取指定用户所属的用户组。命令实操演示# 重载修改后的队列配置文件使新的资源分配策略立刻生效 yarn rmadmin -refreshQueues # 刷新节点上下线列表比如维护后上线节点 yarn rmadmin -refreshNodes # 查看用户 hadoop 属于哪些组 yarn rmadmin -getGroups hadoop总结YARN 将资源管理RM与任务执行AM完美拆分使得 Hadoop 集群不再仅仅绑定于 MapReduce而成为了一个通用的分布式资源操作系统。理解其内部RM - AM - NM - Container的协同机制不仅有助于你解决海量任务的资源瓶颈问题更是你从“会用工具”向“精通运维”进阶的关键一步。掌握文中提到的yarn application和yarn rmadmin命令能让你在大数据运维中更加得心应手