Hadoop 入门笔记—核心组件 YARN
基本概述
Apache YARN (Yet Another Resource Negotiator) 是 Hadoop 中的资源管理和作业调度系统, 在 Hadoop 2.x 时才被引入。
用户可以将各种服务框架部署在 YARN 上,由 YARN 进行统一地管理和资源分配。
Yarn在 Hadoop2.x 时才被推出,在 Hadoop1.x 时,主要由 MapReduce 进行资源分配,由于考虑到如果 MapReduce 在计算中挂掉了,那么资源调度也将停止工作,于是在新版本中将资源调度这部分功能剥离开,才有 Yarn。
核心架构
在大数据培训学习过程中我们都学过Yarn 的主要架构分为四个部分:ResourceManager、NodeManager、ApplicationMaster、Container
ResourceManager
ResourceManager 通常在独立的部署在一台机器作为应用运行,集群中只有一个,负责整个系统的资源管理和分配。
ResourceManager 主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications Manager,ASM)。能够根据应用程序优先级、队列容量、数据位置等信息,做出决策,通过安全的、共享的、多租户的方式制定分配策略,调度集群资源。
NodeManager
NodeManager 是 YARN 集群中的每个具体节点的管理者。主要负责该节点内所有容器的生命周期的管理,监视资源和跟踪节点健康。
NodeManager 主要用来处理来自ResourceManager 、ApplicationMaster的命令。
一个节点启动时,它会向 ResourceManager 进行注册并推送可用资源信息。在运行期,通过 NodeManager 和 ResourceManager 协同工作,这些信息会不断被更新并保障整个集群发挥出最佳状态。
ApplicationMaster
在用户提交一个应用程序时,YARN 会启动一个轻量级的进程ApplicationMaster。
ApplicationMaster 负责协调来自ResourceManager 的资源,并通过NodeManager 监视容器内资源的使用情况,同时还负责任务的监控与容错。
ApplicationMaster 将能将数据进行拆分,并根据应用的运行状态动态匹配资源需求,能够监控跟踪任务状态和进度,报告应用的进度信息。
Container
Container是 YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。
当ApplicationMaster 向ResourceManager 申请资源时,ResourceManager 为ApplicationMaster 返回的资源是用Container 表示的。
YARN 会为每个任务分配一个Container,该任务只能使用该Container 中描述的资源。
ApplicationMaster 可在Container 内运行任何类型的任务。
工作流程
YARN 应用提交的整个工作流程:
首先客户端提交任务到 YARN 上,ResourceManager 提交应用并请求一个ApplicationMaster 实例;
ResourceManager 会选择一个可运行的NodeManager,并在Container 中启动并运行ApplicationMaster 实例;
启动中的ApplicationMaster 向ResourceManager 注册自己,启动成功后与RM保持心跳。
ApplicationMaster 向ResourceManager 发送请求,获取需要的Container 资源;
ApplicationMaster 通过获取到的Container 资源执行分布式计算。
应用运行结束后,ApplicationMaster 向ResourceManager 注销自己,并允许属于它的container 被收回。
总结
Yarn 主要在 Hadoop 体系中负责服务资源的调度分配,能够最大限度的利用机器资源,高效调配,达到资源利用的最大化。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通