当前位置: 首页 > news >正文

【Hadoop】Hadoop核心基础——YARN 框架架构与运行机制(Hadoop 集群的 “资源管家”)

目录

一、先搞懂:为什么需要 YARN?Hadoop 1.x 的痛点

1. 单点瓶颈

2. 资源利用率低

3. 生态封闭

二、YARN 的核心架构:4 大组件各司其职

1. 核心组件 1:ResourceManager(RM)—— 集群的 “大管家”

2. 核心组件 2:NodeManager(NM)—— 单个节点的 “管理员”

3. 核心组件 3:ApplicationMaster(AM)—— 单个应用的 “指挥官”

4. 核心组件 4:Container—— 资源分配的 “最小单位”

三、YARN 运行全流程:一个 MapReduce 任务如何在 YARN 上运行?

步骤 1:客户端提交应用

步骤 2:ResourceManager 启动 ApplicationMaster

步骤 3:ApplicationMaster 注册并申请资源

步骤 4:ResourceManager 调度资源并分配 Container

步骤 5:ApplicationMaster 启动任务 Container

步骤 6:任务执行并汇报进度

步骤 7:应用完成,释放资源

步骤 8:ResourceManager 清理并反馈结果

四、YARN 与 Hadoop 1.x 的核心差异:从 “封闭” 到 “开放”

五、YARN 的核心优势与典型应用场景

1. 核心优势

2. 典型应用场景

六、总结与下期预告


上一期我们拆解了 MapReduce 的分布式计算逻辑,而支撑 MapReduce(以及 Spark、Flink 等计算框架)稳定运行的核心,正是 Hadoop 2.0 引入的 YARN 框架。如果说 HDFS 是 Hadoop 的 “存储基石”,MapReduce 是 “计算引擎”,那 YARN 就是 “资源调度中枢”—— 它解决了 Hadoop 1.x 的核心痛点,让集群资源实现高效、灵活的统一管理。这篇文章就带大家搞懂 YARN 的设计初衷、核心架构和运行流程,明白它为什么能成为 Hadoop 生态的 “资源管家”。

一、先搞懂:为什么需要 YARN?Hadoop 1.x 的痛点

在 Hadoop 1.x 中,并没有 YARN 框架 ——MapReduce 的 “资源管理” 和 “任务调度” 全由一个叫 “JobTracker” 的组件负责。这种架构在小规模集群(几十台节点)中没问题,但随着集群规模扩大到几百、几千台,就会暴露三个致命痛点:

1. 单点瓶颈

JobTracker 既要管理集群的 CPU、内存等资源,又要监控成千上万的 Map/Reduce 任务、处理任务失败重试 —— 相当于 “一个人又当管理员又当执行者”。当集群节点增多、任务量增大时,JobTracker 的内存、CPU 会成为瓶颈,导致整个集群性能下降甚至崩溃。

2. 资源利用率低

Hadoop 1.x 的资源分配是 “静态分区”—— 集群资源被划分为固定数量的 “Slot(槽位)”,Map 任务和 Reduce 任务各占一部分 Slot。如果当前只有 Map 任务需要运行,Reduce Slot 会闲置;反之亦然,资源无法动态调配,造成大量浪费。

3. 生态封闭

Hadoop 1.x 的资源管理和 MapReduce 深度绑定,只能运行 MapReduce 任务。而随着大数据技术发展,Spark、Flink 等更高效的计算框架出现,但这些框架无法复用 Hadoop 1.x 的集群资源,导致企业需要维护多套集群,增加了运维成本。

为了解决这些问题,Hadoop 2.0 引入了 YARN 框架 —— 它的核心思路是 “解耦”:把 JobTracker 的 “资源管理” 和 “任务调度” 拆分成两个独立服务,同时支持多计算框架共享集群资源。这一改造让 Hadoop 从 “单一计算框架” 升级为 “分布式计算平台”。

二、YARN 的核心架构:4 大组件各司其职

YARN 采用 “Master/Slave” 主从架构,核心由 1 个全局资源管理器(ResourceManager)、多个节点资源管理器(NodeManager)、每个任务对应的应用管理器(ApplicationMaster),以及资源分配单位(Container)组成。这四个组件协同工作,实现 “资源统一管理、任务分布式执行”。

1. 核心组件 1:ResourceManager(RM)—— 集群的 “大管家”

ResourceManager 是 YARN 的 “全局主节点”,运行在集群的某一台服务器上(通常与 HDFS 的 NameNode 部署在不同节点,避免单点故障),核心职责是 “管全局资源、做调度决策”,不参与具体任务的执行和监控。

它包含两个关键子组件:

  • 调度器(Scheduler):纯资源调度组件,根据集群资源策略(如容量、公平),将 CPU、内存等资源分配给各个应用(如 MapReduce 任务、Spark 任务)。调度器只负责 “分配资源”,不关心任务的执行状态(如任务是否失败、是否需要重试)。
    • 常见调度策略:YARN 默认提供 “容量调度器(Capacity Scheduler)” 和 “公平调度器(Fair Scheduler)”—— 前者适合多团队共享集群(按比例分配资源),后者适合单团队(资源公平分配给所有任务)。
  • 应用程序管理器(Applications Manager):负责管理整个集群的应用生命周期 —— 接收客户端提交的应用、为应用启动第一个 Container 来运行 ApplicationMaster、监控 ApplicationMaster 的状态(如果 AM 失败,会重新启动)、接收应用完成的通知并清理资源。

2. 核心组件 2:NodeManager(NM)—— 单个节点的 “管理员”

NodeManager 是 YARN 的 “从节点组件”,运行在集群的每一台服务器上(与 HDFS 的 DataNode 部署在同一节点),核心职责是 “管理本节点资源、执行具体任务”。

它的核心工作:

  • 资源管理:监控本节点的 CPU、内存、磁盘、网络等资源使用情况,定期(每秒)向 ResourceManager 汇报 “心跳”,告知当前节点的资源剩余和任务运行状态。
  • 容器管理:根据 ApplicationMaster 的请求,在本节点启动 / 停止 “Container(容器)”——Container 是 YARN 的资源分配单位,封装了 CPU 核心数、内存大小等资源,任务只能在 Container 中运行,避免资源抢占。
  • 任务监控:监控 Container 的运行状态,若 Container 失败或超时,会向 ApplicationMaster 和 ResourceManager 汇报,以便进行故障处理。

3. 核心组件 3:ApplicationMaster(AM)—— 单个应用的 “指挥官”

ApplicationMaster 是 “每个应用独有的任务管理器”—— 用户提交的每个应用(如一个 MapReduce 任务、一个 Spark 作业),都会对应一个 ApplicationMaster。它运行在集群的某个 Container 中,核心职责是 “为当前应用申请资源、调度任务执行、监控任务状态”。

以 MapReduce 应用为例,其 ApplicationMaster 称为 “MRAppMaster”,具体工作包括:

  • 资源申请:根据应用的任务需求(如需要多少个 Map/Reduce 任务),向 ResourceManager 的调度器申请 Container 资源。
  • 任务调度:将申请到的 Container 分配给具体任务(如 Map 任务分配到数据所在的节点),并向 NodeManager 发送指令,启动任务。
  • 任务监控:实时监控所有任务的运行状态,若某个任务失败,会重新申请资源并重启任务;若 ApplicationMaster 自身失败,ResourceManager 会重启它。
  • 结果汇总:当所有任务执行完成后,向 ResourceManager 汇报应用完成状态,释放资源并退出。

4. 核心组件 4:Container—— 资源分配的 “最小单位”

Container 是 YARN 中 “资源的抽象封装”,也是任务运行的 “隔离环境”—— 它不是一个进程,而是一组资源的集合(CPU、内存、磁盘 I/O、网络带宽等),并通过 Linux 的 Cgroups 等技术实现资源隔离,确保不同任务之间不会抢占资源。

Container 的核心特点:

  • 动态分配:资源按需分配,没有固定的 Map/Reduce Slot 划分,某个任务需要多少资源就申请多少,用完释放,提高资源利用率。
  • 多维度资源:支持 CPU、内存、磁盘、网络等多维度资源限制,满足不同任务的资源需求(如 CPU 密集型的机器学习任务、内存密集型的数据处理任务)。
  • 生命周期绑定:Container 的生命周期与任务绑定 —— 任务启动时创建 Container,任务结束后 Container 释放资源,资源可被其他任务复用。

三、YARN 运行全流程:一个 MapReduce 任务如何在 YARN 上运行?

为了让大家更直观理解 YARN 的工作机制,我们以 “运行一个 WordCount MapReduce 任务” 为例,拆解从应用提交到任务完成的完整流程(共 8 步):

步骤 1:客户端提交应用

用户通过hadoop jar命令提交 WordCount 任务(应用),并指定应用的相关信息:应用名称、Map/Reduce 任务数量、ApplicationMaster 的启动脚本、应用所需的资源总量等。客户端会将这些信息发送给 YARN 的 ResourceManager。

步骤 2:ResourceManager 启动 ApplicationMaster

ResourceManager 的应用程序管理器(Applications Manager)收到请求后,会先检查集群资源是否充足。若充足,会向某个 NodeManager 发送指令,启动一个 “启动型 Container”—— 这个 Container 专门用于运行 WordCount 应用的 MRAppMaster(ApplicationMaster)。

步骤 3:ApplicationMaster 注册并申请资源

MRAppMaster 启动后,会先向 ResourceManager 注册自己的身份信息(如应用 ID、自身所在的节点地址),之后 ResourceManager 就会通过 MRAppMaster 监控整个应用的运行状态。

接着,MRAppMaster 会分析 WordCount 任务的需求:需要 10 个 Map 任务、2 个 Reduce 任务,并根据 HDFS 中数据的分布情况(数据本地化原则),向 ResourceManager 的调度器申请 12 个 Container 资源(10 个用于 Map 任务,2 个用于 Reduce 任务)。

步骤 4:ResourceManager 调度资源并分配 Container

调度器根据集群的资源策略(如容量调度),结合各 NodeManager 汇报的资源剩余情况,为 MRAppMaster 分配 12 个 Container—— 优先将 Map 任务的 Container 分配到数据所在的 DataNode 节点(减少网络传输)。调度器会返回每个 Container 的具体信息:所在节点的 IP、端口、资源大小等。

步骤 5:ApplicationMaster 启动任务 Container

MRAppMaster 收到 Container 分配结果后,会向对应的 NodeManager 发送指令:在指定 Container 中启动 Map/Reduce 任务。NodeManager 收到指令后,会根据 Container 的资源配置,创建隔离的运行环境,加载 Map/Reduce 任务的代码和依赖,启动任务。

步骤 6:任务执行并汇报进度

Map/Reduce 任务在 Container 中运行,实时向 MRAppMaster 汇报进度(如 Map 任务处理了多少数据、Reduce 任务聚合了多少结果)。若某个任务执行失败,MRAppMaster 会向 ResourceManager 申请新的 Container,在其他节点重启任务。

同时,各 NodeManager 会持续向 ResourceManager 汇报本节点的资源使用情况和 Container 状态,确保 ResourceManager 掌握全局状态。

步骤 7:应用完成,释放资源

当所有 Map/Reduce 任务执行完成后,MRAppMaster 会向 ResourceManager 汇报 “应用完成”,并释放所有已分配的 Container 资源。

步骤 8:ResourceManager 清理并反馈结果

ResourceManager 收到应用完成的通知后,会清理该应用的相关元数据,然后向客户端返回 “任务完成” 的反馈。客户端可以通过 HDFS 查看 WordCount 的最终输出结果,整个流程结束。

四、YARN 与 Hadoop 1.x 的核心差异:从 “封闭” 到 “开放”

通过前面的架构和流程拆解,我们能清晰看到 YARN 相比 Hadoop 1.x 的革命性变化。下面通过表格总结核心差异,帮大家快速梳理:

对比维度Hadoop 1.x(无 YARN)Hadoop 2.x(有 YARN)
资源管理组件JobTracker(集资源 + 任务管理于一体)ResourceManager(全局资源管理)+ NodeManager(节点资源管理)
任务调度组件JobTracker 直接调度 Map/Reduce 任务ApplicationMaster(每个应用独立调度)
资源分配单位固定 Slot(Map Slot/Reduce Slot)动态 Container(按需分配 CPU / 内存)
资源利用率低(静态分区,Slot 易闲置)高(动态调配,资源按需复用)
支持的计算框架仅 MapReduceMapReduce、Spark、Flink、Storm 等
集群扩展性差(JobTracker 单点瓶颈)好(ResourceManager 轻量,支持上万节点)
任务容错JobTracker 统一处理ApplicationMaster 自主处理,ResourceManager 监控 AM

核心总结:YARN 的本质是 “通用资源管理平台”—— 它剥离了 MapReduce 的资源管理功能,让 MapReduce 从 “全栈框架” 降级为 “运行在 YARN 上的计算引擎”,同时开放接口支持其他计算框架,让 Hadoop 集群成为 “多框架共享的资源池”。

五、YARN 的核心优势与典型应用场景

1. 核心优势

  • 统一资源管理:集群的 CPU、内存、磁盘等资源由 YARN 统一调度,避免多框架重复部署集群,降低运维成本;
  • 动态资源调配:资源按需分配、动态回收,解决了静态 Slot 的资源浪费问题,集群资源利用率提升 30% 以上;
  • 高扩展性:ResourceManager 仅负责资源调度,不参与任务监控,支持上万节点的大规模集群;
  • 生态开放:支持 MapReduce、Spark、Flink 等主流计算框架,企业可根据场景选择合适的框架,复用 Hadoop 的存储和资源;
  • 高容错性:任何组件失败都有兜底机制(如 AM 失败重启、任务失败重试),确保集群稳定运行。

2. 典型应用场景

  • 多框架共享集群:企业用一套 Hadoop 集群,同时运行 MapReduce(离线批处理)、Spark(交互式分析)、Flink(实时流处理),资源按需分配;
  • 大规模批处理:支撑 MapReduce 处理 PB 级数据,YARN 通过动态资源调配,让批处理任务高效利用集群资源;
  • 交互式查询:Spark SQL、Hive 等交互式查询框架运行在 YARN 上,YARN 的资源隔离机制确保查询任务不会影响其他任务;
  • 实时流处理:Flink、Storm 等流处理框架通过 YARN 获取资源,实现低延迟的实时数据处理(如实时日志分析、实时推荐)。

六、总结与下期预告

这一期我们拆解了 YARN 的核心架构和运行机制 —— 它的核心价值在于 “解耦” 和 “开放”:解耦了资源管理与任务调度,解决了 Hadoop 1.x 的单点瓶颈;开放了资源接口,让 Hadoop 从 “单一计算框架” 升级为 “分布式计算平台”。

有了 YARN 的支撑,Hadoop 生态才能容纳 MapReduce、Spark、Flink 等多样化的计算框架,成为大数据领域的 “基础设施”。下一期,我们将进入实战环节 —— 手把手教大家搭建 Hadoop 2.0 集群,从环境准备、配置文件修改到集群启动验证,让你亲手打造属于自己的 Hadoop 集群,为后续的生态工具学习打下基础。

思考题:如果集群中同时运行 “离线批处理任务”(MapReduce)和 “实时流处理任务”(Flink),你会选择 YARN 的哪种调度策略(容量调度 / 公平调度)?为什么?欢迎在评论区分享你的思路!

http://www.dtcms.com/a/596287.html

相关文章:

  • MI50运算卡使用llama.cpp的ROCm后端运行gpt-oss-20b的速度测试
  • 聊聊关于hive“中文乱码”问题
  • 一般建设网站需要多少预算酷站 网站
  • ASP.NET 实战:用 CSS 选择器打造一个可搜索、响应式的书籍管理系统
  • 消息队列防止数据丢失问题
  • Spring Cloud Bus 事件广播机制
  • 广州巨腾建网站公司郑州网站app开发
  • 银河麒麟服务器安装图形化界面
  • 【源码+文档+调试讲解】基于Spring Boot的考务管理系统设计与实现 085
  • LeetCode 421 - 数组中两个数的最大异或值
  • 【笔记】xFormers版本与PyTorch、CUDA对应关系及正确安装方法详解
  • 【GitHub每日速递 20251111】PyTorch:GPU加速、动态网络,深度学习平台的不二之选!
  • 多产品的网站怎么做seo做音乐网站之前的准备
  • 网站如何做h5动态页面设计万网备案初审过了后网站能访问吗
  • centos运维常用命令
  • 在CentOS 7.6系统中找回或重置 root 密码
  • 濮阳团购网站建设手机网站模板psd
  • 基于Spring Boot的电子犬证管理系统设计与实现
  • Spring Boot 中的定时任务:从基础调度到高可用实践
  • 家装设计师网站wordpress小清新模板
  • 用WordPress制作单页相城seo网站优化软件
  • wordpress主题wpmee江门网站优化排名
  • 淮安设计网站苏州网站建设相关技术
  • 公司的网站开发费计入什么科目济南传承网络李聪
  • 营销类型的公司网站物联网平台功能
  • 做网站设计都需要什么杭州建设信息网
  • 惠州网站设计哪家好网站内的搜索怎么做的
  • 网站域名使用费用上海十大猎头公司排名
  • 网站建站程序wordpress salient
  • 舞蹈网站模板权威做网站的公司