9. YARN 架构概述

本文介绍YARN产生的背景,包括解决MapReduce1.x版本中的问题,如JobTracker单点故障、扩展性和资源分配不合理等问题。同时详细阐述YARN的设计思路、体系结构及工作流程。

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

YARN产生背景

在hadoop 1.x版本中MapReduce架构如下图所示:
这里写图片描述

整个集群采用master/slave模式:1个JobTracker和多个TaskTracker。

JobTracker职责:

  • 负责整个集群的资源管理:JobTracker通过定期收集TaskTracker节点资源使用情况以确定下一个任务在哪个TaskTracker节点上运行。
  • 负责作业调度:定期收集TaskTracker节点job运行情况,对于运行失败的job则会下发到另外的节点上运行。

TaskTracker职责:

  • 定期向JobTracker汇报本节点的健康情况,资源使用情况,job运行情况。
  • 接受TaskTracker的指令:启动job,杀死job等。

可以看得出原来的 map-reduce 1.x 架构是比较简单明了的,在最初推出的几年,也得到了众多的成功案例,获得业界广泛的支持和肯定,但随着分布式系统集群的规模和其工作负荷的增长,原框架的问题逐渐浮出水面,主要的问题集中如下:

  • JobTracker单点故障
  • 不易扩展:JobTracker兼具资源调度和作业调度双重职责,在任务较多时内存开销会很大。当节点数达到4000,任务数达到40000时,MapReduce 1.x 将遇到可扩展性瓶颈。
  • 资源划分不合理:MapReduce 1.x中资源是以slot为分配的基本单元,并被划分为map slot和reduce slot。一个map slot仅能用于运行一个map任务,同样一个reduce slot仅能运行一个reduce任务。

YARN架构

YARN设计思路

YARN的设计思路:

  1. 将原JobTracker的功能进行拆分。
    这里写图片描述
  2. 一个集群多个框架,即在一个集群上部署一个统一的资源调度框架YARN,在YARN之上可以部署各种计算框架。
    这里写图片描述

YARN体系结构

这里写图片描述

ResourceManager

  • 处理客户端请求
  • 启动/监控ApplicationMaster
  • 监控NodeManager
  • 资源分配与调度

ApplicationMaster

  • 为应用程序申请资源,并分配给内部任务
  • 任务调度,监控与容错

NodeManger

  • 单个节点上的资源管理
  • 处理来自ResourceManager的命令
  • 处理来自ApplicationMaster的命令

YARN工作流程

这里写图片描述

  1. 用户向Yarn提交应用程序,其中包括用户程序、相关文件、启动ApplicationMaster命令、ApplicationMaster程序等。
  2. Yarn中的ResourceManager为应用程序分配一个容器,在该容器中启动一个ApplicationMaster。
  3. ApplicationMaster会首先向ResourceManager注册。
  4. ApplicationMaster采用轮询的方式向ResourceManager申请资源。
  5. ResourceManager向ApplicationMaster分配容器资源。
  6. 在容器中启动任务(运行环境,脚本)。
  7. 各个任务向其对应的ApplicationMaster汇报自己的运行状态和进度。
  8. 应用程序运行完毕后,ApplicationMaster与ResourceManager通信,要求注销和关闭自己。

总结

本文介绍了YARN的产生背景以及设计架构,工作流程。

### YARN 架构详解及工作原理 #### 1. YARN 的基本概念 YARN 是 Hadoop 集群的资源管理系统,旨在解决 MapReduce 中 JobTracker 存在的单点故障和扩展性问题[^3]。它的核心目标是分离资源管理和作业调度的功能,从而支持多种计算框架(如 Spark、Flink 等),而不仅仅是传统的 MapReduce。 #### 2. YARN 的主要组件 YARN 主要由以下几个关键组件构成: - **ResourceManager (RM)** ResourceManager 是整个 YARN 集群的核心管理模块,负责全局资源的分配和管理工作。它主要包括两个子模块:Scheduler 和 ApplicationsManager。Scheduler 负责将集群资源分配给各个应用程序,而 ApplicationsManager 则负责处理来自客户端的应用程序提交请求并协调 ApplicationMaster 的初始化过程[^4]。 - **NodeManager (NM)** NodeManager 运行在每个节点上,用于监控该节点上的资源使用情况以及任务执行状态。当 RM 向 NM 分配任务时,NM 会启动 Container 来运行具体的任务逻辑。Container 是一种轻量级的资源隔离机制,封装了 CPU、内存等多维资源的信息。 - **ApplicationMaster (AM)** 每个分布式应用都会有一个对应的 ApplicationMaster 实例,其职责类似于传统意义上的 TaskTracker 或者 Worker Role。具体来说,AM 动态申请所需资源并向对应 NM 发送指令以创建容器实例;同时还需要跟踪所有下属任务的状态变化以便及时调整策略或者报告异常事件给上级管理者即 RM。 #### 3. 工作流程概述 以下是基于 YARN 架构的一个典型任务提交与执行流程描述: 1. 用户通过 Client 提交一个新任务到 ResourceManager 上。 2. ResourceManager 接收到此请求后,会先为其分配第一个 Container 并告知某个可用 NodeManager 创建相应的 ApplicationMaster 实体。 3. 成功启动后的 AM 开始向 RM 请求额外所需的 Containers 数量及其规格参数配置文件等内容。 4. 得到批准之后,这些被指派出去的新建 Containers 就会在各自归属地所在位置处开始真正意义上属于业务层面的操作——也就是调用用户定义好的 Mapper/Reducer 函数完成数据加工转换等工作负载[^2]。 此外值得注意的是,在上述过程中还涉及到心跳检测机制用来保持通信链路畅通无阻,并且允许管理员设置超时时限来防止某些长期未响应的服务单元占用宝贵计算能力太久时间。 ```python from pyspark import SparkConf, SparkContext conf = SparkConf().setAppName("example").setMaster("yarn") sc = SparkContext(conf=conf) data = sc.parallelize([1, 2, 3, 4]) result = data.map(lambda x: x * 2).collect() print(result) ``` 以上代码片段展示了如何利用 PySpark 在 YARN 模式下简单操作集合数据的例子。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值