Yarn-概述
一、YARN 是什么?
YARN(Yet Another Resource Negotiator) 是 Apache Hadoop 生态系统中的核心组件,是一个 分布式资源管理和作业调度系统,主要用于协调集群中的计算资源(CPU、内存、磁盘、网络等),并为上层应用(如 MapReduce、Spark、Flink 等)提供统一的资源管理和调度服务。
- 诞生背景:Hadoop 1.0 中,JobTracker 同时承担资源管理和作业调度任务,存在单点故障、扩展性差、资源利用率低等问题。YARN 作为 Hadoop 2.0 的核心改进,通过分离资源管理和作业逻辑,解决了上述痛点。
- 核心定位:YARN 是大数据集群的 “操作系统”,负责资源的分配与调度,支持多种计算框架(批处理、实时计算、机器学习等)在同一集群上运行,实现资源共享与弹性扩展。
二、YARN 的核心架构与组件
YARN 采用 主从架构(Master-Slave),核心组件包括:
-
ResourceManager(RM,资源管理器)
- 全局管理者:负责整个集群的资源管理和调度,跟踪集群中所有节点(NodeManager)的资源使用情况(内存、CPU 等)。
- 调度器(Scheduler):根据资源需求和调度策略(如容量调度、公平调度),为应用程序分配资源,不负责应用状态监控和故障恢复。
- 应用管理器(ApplicationManager):管理所有应用程序的生命周期,包括应用提交、ApplicationMaster 的启动和容错。
-
NodeManager(NM,节点管理器)
- 节点管理者:运行在每个集群节点上,负责管理单个节点的资源(CPU、内存、磁盘、网络),监控容器(Container)的状态,并向 ResourceManager 汇报节点状态。
- 容器(Container):YARN 中资源分配的基本单位,封装了一组资源(如 2GB 内存 + 4 个 CPU 核心),是应用程序运行的环境(可运行 Map/Reduce 任务、Spark 任务等)。
-
ApplicationMaster(AM,应用主程序)
- 应用协调者:每个应用程序(如一个 MapReduce 作业)对应一个 ApplicationMaster,负责与 ResourceManager 协商资源、与 NodeManager 交互启动 / 监控容器,以及处理作业的状态和容错。
- 职责:申请资源、分配任务到容器、监控任务执行、处理任务失败并重启等。
-
作业提交客户端(Client)
- 用户提交作业的入口,负责将作业请求发送给 ResourceManager,并查询作业状态。
三、YARN 的工作流程
- 作业提交:客户端将作业提交到 YARN,ResourceManager 分配第一个 Container 用于启动 ApplicationMaster。
- AM 启动:ApplicationMaster 在 Container 中启动,向 ResourceManager 注册并申请作业所需的资源(内存、CPU 等)。
- 资源分配:ResourceManager 根据调度策略,将可用资源以 Container 形式分配给 ApplicationMaster。
- 任务执行:ApplicationMaster 将任务分配到对应的 Container 中(由 NodeManager 启动和管理),任务开始执行并汇报进度。
- 作业完成:所有任务完成后,ApplicationMaster 向 ResourceManager 注销并释放资源,客户端获取作业结果。
四、YARN 的核心优势
-
资源统一管理与共享
- 支持 MapReduce、Spark、Flink 等多种计算框架运行在同一集群,避免资源孤岛,提高集群利用率(如白天跑实时任务,夜间跑批处理任务)。
-
分离资源管理与作业调度
- ResourceManager 专注于资源调度,ApplicationMaster 专注于作业逻辑,解决了 Hadoop 1.0 中 JobTracker 负载过重的问题,提升扩展性和稳定性。
-
灵活的调度策略
- 支持多种调度器(如 容量调度器(Capacity Scheduler)、公平调度器(Fair Scheduler)),可根据业务需求分配资源(如为关键应用预留资源)。
-
高可用性与容错
- ResourceManager 支持主备(Active/Standby)模式,避免单点故障;NodeManager 和 ApplicationMaster 可自动重启失败的任务或容器。
-
弹性扩展
- 集群可动态添加 / 移除节点,YARN 自动重新分配资源,适应业务规模变化。
五、YARN 的应用场景
-
多框架统一部署
- 大数据集群中同时运行批处理(MapReduce)、实时计算(Flink)、交互式查询(Hive on Spark)等任务,共享硬件资源。
-
资源隔离与优先级管理
- 通过调度器为不同部门、不同应用分配资源配额,确保关键任务优先执行(如实时风控系统优先于离线报表任务)。
-
大规模分布式计算
- 支持处理 PB 级数据的分布式作业,如日志分析、数据清洗、机器学习模型训练(如 TensorFlow on YARN)。
六、YARN 与其他组件的关系
- HDFS:YARN 的数据存储层,作业输入输出数据通常存储在 HDFS 中。
- 计算框架:MapReduce、Spark、Flink 等作为 YARN 的 “应用” 运行,通过 YARN 申请资源,无需关心底层集群细节。
- 生态整合:YARN 是 Hadoop 生态的核心枢纽,支撑 Hive、Pig、Flink 等上层工具的运行,推动大数据平台的统一化管理。