YARN

本文深入探讨YARN(Yet Another Resource Negotiator)架构,解析其如何解决原MapReduce框架的局限,提升资源利用率。介绍了YARN的主要角色如ResourceManager、NodeManager、MRAppMaster的功能,以及Container、ASM和Scheduler的概念。通过YARN,企业能整合各类计算框架,实现资源统一管理和高效使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.YARN概述

YARN(Yet Another Resource Negotiator)

  1. YARN 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而 MapReduce等运算程序则相当于运行于操作系统之上的应用程序
  2. YARN 是 Hadoop2.x 版本中的一个新特性。它的出现其实是为了解决第一代 MapReduce 编程框架的不足,提高集群环境下的资源利用率,这些资源包括内存,磁盘,网络,IO等。Hadoop2.X
    版本中重新设计的这个 YARN 集群,具有更好的扩展性,可用性,可靠性,向后兼容性,以及能支持除 MapReduce 以外的更多分布式计算程序
    1、YARN 并不清楚用户提交的程序的运行机制
    2、YARN 只提供运算资源的调度(用户程序向 YARN 申请资源,YARN 就负责分配资源)
    3、YARN 中的主管角色叫 ResourceManager
    4、YARN 中具体提供运算资源的角色叫 NodeManager
    5、这样一来,YARN 其实就与运行的用户程序完全解耦,就意味着 YARN 上可以运行各种类型的分布式运算程序(MapReduce 只是其中的一种),比如 MapReduce、Storm 程序,Spark程序,Tez ……
    6、所以,Spark、Storm 等运算框架都可以整合在 YARN 上运行,只要他们各自的框架中有符合 YARN 规范的资源请求机制即可
    7、yarn 就成为一个通用的资源调度平台,从此,企业中以前存在的各种运算集群都可以整合在一个物理集群上,提高资源利用率,方便数据共享

2.YARN的产生背景

1、原 MapReduce 框架的不足
1、JobTracker 是集群事务的集中处理点,存在单点故障
2、JobTracker 需要完成的任务太多,既要维护 job 的状态又要维护 job 的 task 的状态,造成过多的资源消耗
3、在 TaskTracker 端,用 Map/Reduce Task 作为资源的表示过于简单,没有考虑到 CPU、内存等资源情况,当把两个需要消耗大内存的 Task 调度到一起,很容易出现 OOM
4、把资源强制划分为 Map/Reduce Slot,当只有 MapTask 时,TeduceSlot 不能用;当只有 Reduce Task 时,MapSlot 不能用,容易造成资源利用不足。
总结起来就是:
1、扩展性差
2、可靠性低
3、资源利用率低
4、不支持多种计算框架

2.新版 YARN 架构的优点
YARN/MRv2 最基本的想法是将原 JobTracker 主要的资源管理和 Job 调度/监视功能分开作为两个单独的守护进程。
有一个全局的 ResourceManager(RM)和每个 Application 有一个ApplicationMaster(AM)Application 相当于 MapReduce Job 或者 DAG jobs。ResourceManager和 NodeManager(NM)组成了基本的数据计算框架。ResourceManager 协调集群的资源利用,
任何 Client 或者运行着的 applicatitonMaster 想要运行 Job 或者 Task 都得向 RM 申请一定的资源。ApplicatonMaster 是一个框架特殊的库,对于 MapReduce 框架而言有它自己的 AM 实现,用户也可以实现自己的 AM,在运行的时候,AM 会与 NM 一起来启动和监视 Tasks。

3.YARN 的重要概念

1、ResourceManager
ResourceManager 是基于应用程序对集群资源的需求进行调度的 YARN 集群主控节点,负责协调和管理整个集群(所有 NodeManager)的资源,响应用户提交的不同类型应用程序的解析,调度,监控等工作。ResourceManager 会为每一个 Application 启动一个MRAppMaster,并且 MRAppMaster 分散在各个 NodeManager 节点。
它主要由两个组件构成:调度器(Scheduler)和应用序管理器(ApplicationsManager,ASM)
YARN 集群的主节点 ResourceManager 的职责:
1、处理客户端请求
2、启动或监控 MRAppMaster
3、监控 NodeManager
4、资源的分配与调度

2.NodeManager
NodeManager 是 YARN 集群当中真正资源的提供者,是真正执行应用程序的容器的提供者,监控应用程序的资源使用情况(CPU,内存,硬盘,网络),并通过心跳向集群资源调度器ResourceManager 进行汇报以更新自己的健康状态。同时其也会监督 Container 的生命周期管理,监控每个 Container 的资源使用(内存、CPU 等)情况,追踪节点健康状况,管理日志和不同应用程序用到的附属服务(auxiliary service)。
YARN 集群的从节点 NodeManager 的职责:
1、管理单个节点上的资源
2、处理来自 ResourceManager 的命令
3、处理来自 MRAppMaster 的命令

3、MRAppMaster
MRAppMaster 对应一个应用程序,职责是:向资源调度器申请执行任务的资源容器,运行任务,监控整个任务的执行,跟踪整个任务的状态,处理任务失败以异常情况

4、Container
Container 容器是一个抽象出来的逻辑资源单位。容器是由 ResourceManager Scheduler 服务动态分配的资源构成,它包括了该节点上的一定量 CPU,内存,磁盘,网络等信息,MapReduce程序的所有 Task 都是在一个容器里执行完成的,容器的大小是可以动态调整的

5、ASM
应用程序管理器 ASM 负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协
商资源以启动 MRAppMaster、监控 MRAppMaster 运行状态并在失败时重新启动它等

6、Scheduler
调度器根据应用程序的资源需求进行资源分配,不参与应用程序具体的执行和监控等工作资源分配的单位就是 Container,调度器是一个可插拔的组件,用户可以根据自己的需求实现自己的调度器。YARN 本身为我们提供了多种直接可用的调度器,比如 FIFO,Fair Scheduler和 Capacity Scheduler 等。

4、YARN 架构及各角色职责

在这里插入图片描述

5、YARN 作业执行流程

1、用户向 YARN 中提交应用程序,其中包括 MRAppMaster 程序,启动 MRAppMaster 的命令,用户程序等。
2、ResourceManager 为该程序分配第一个 Container,并与对应的 NodeManager 通讯,要求它在这个 Container 中启动应用程序 MRAppMaster。
3、MRAppMaster 首先向 ResourceManager 注册,这样用户可以直接通过 ResourceManager查看应用程序的运行状态,然后将为各个任务申请资源,并监控它的运行状态,直到运行结束,重复 4 到 7 的步骤。
4、MRAppMaster 采用轮询的方式通过 RPC 协议向 ResourceManager 申请和领取资源。
5、一旦 MRAppMaster 申请到资源后,便与对应的 NodeManager 通讯,要求它启动任务。6、NodeManager 为任务设置好运行环境(包括环境变量、JAR 包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
7、各个任务通过某个 RPC 协议向 MRAppMaster 汇报自己的状态和进度,以让 MRAppMaster随时掌握各个任务的运行状态,从而可以在任务败的时候重新启动任务。
8、应用程序运行完成后,MRAppMaster 向 ResourceManager 注销并关闭自己。

job提交流程:

在这里插入图片描述

<think>嗯,用户想了解Yarn包管理器的介绍和使用方法。首先,我需要回忆一下Yarn的基本信息。Yarn是由Facebook、Google等公司合作开发的,主要是为了解决npm早期版本的一些问题,比如依赖安装速度慢和版本不一致。然后,用户提到参考了站内的两个引用,里面提到了Yarn的工作空间和monorepo管理,还有和npm的区别,以及安装配置指南。 用户的问题分为两部分:介绍和使用方法。我需要先介绍Yarn是什么,它的优势,和npm的区别。然后详细说明使用方法,包括安装、初始化项目、添加依赖、安装依赖、运行脚本、工作空间这些方面。根据引用[1]和[2],要强调Yarn的效率和一致性,特别是工作空间的功能,这是用户可能感兴趣的点。 接下来,我需要检查是否有遗漏的要点。比如,Yarn的离线模式、版本锁定文件yarn.lock,这些也是关键点。另外,使用方法部分需要具体命令示例,比如yarn init、yarn add等,让用户能直接操作。工作空间的配置步骤也很重要,引用[1]里提到了,所以必须包含。 可能用户是开发者,正在考虑是否从npm切换到Yarn,或者开始新项目选择包管理工具。因此,需要对比Yarn和npm的优势,帮助用户做决定。同时,用户可能关心实际使用中的常见操作,比如安装依赖、管理依赖版本,以及如何利用工作空间管理多个包。 需要确保回答结构清晰,分点列出,符合用户要求的“结构清晰,帮助逐步解决问题”。同时,根据系统指令,数学公式要用$...$,但这里可能涉及代码块,所以要注意代码格式的正确性。不过问题里没有数学表达式,所以可能用不上,但生成的示例中的代码需要用正确格式。 最后,生成相关问题,可能需要考虑用户接下来会问什么,比如性能优化、工作空间详细配置、与npm的迁移等。根据引用内容,相关问题可以包括Yarn与npm的具体差异、工作空间的使用场景、如何确保依赖一致性等。 总结回答结构:先介绍Yarn,包括背景、优势和与npm的区别。然后使用方法分步骤说明,包括安装、项目初始化、依赖管理、脚本运行、工作空间。最后相关问题部分要覆盖这些方面,帮助用户深入了解更多内容。</think>### Yarn 包管理器介绍 Yarn 是由 Facebook、Google 等公司联合开发的 JavaScript 包管理工具,旨在解决早期 NPM 的依赖安装速度慢、版本管理不一致等问题。其核心优势包括: 1. **依赖版本锁定**:通过 `yarn.lock` 文件确保依赖版本一致性[^2]; 2. **并行安装**:加快依赖下载与安装速度; 3. **离线模式**:支持从本地缓存安装依赖; 4. **工作空间(Workspaces)**:支持 monorepo 项目的多包管理[^1]。 #### Yarn 与 NPM 的区别 | 特性 | Yarn | NPM | |--------------------|---------------------------|----------------------| | 安装速度 | 并行下载更快 | 早期版本较慢 | | 版本锁定 | 默认生成 `yarn.lock` | 需手动生成 `package-lock.json` | | 安全性 | 依赖校验机制更严格 | 依赖校验较弱 | --- ### Yarn 使用方法 #### 1. 安装 Yarn 通过 NPM 全局安装: ```bash npm install -g yarn ``` #### 2. 初始化项目 ```bash yarn init # 生成 package.json ``` #### 3. 添加依赖 ```bash yarn add [package] # 添加生产依赖 yarn add [package]@[version] # 指定版本 yarn add -D [package] # 添加开发依赖 ``` #### 4. 安装所有依赖 ```bash yarn install # 或简写为 yarn ``` #### 5. 运行脚本 ```bash yarn run [script-name] # 执行 package.json 中定义的脚本 ``` #### 6. 使用工作空间(Monorepo) 1. 在根目录 `package.json` 中启用工作空间: ```json { "private": true, "workspaces": ["packages/*"] } ``` 2. 在子包目录中分别管理依赖,Yarn 会自动提升公共依赖到根目录[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值