YARN 架构

对Hadoop有过了解的都知道,Hadoop经历过很长一段时间的版本号混乱和架构调整,YARN是Hadoop 2.0(或者早期的0.23.x)提出的资源管理、任务调度框架。解决了很多Hadoop 1.0(或者0.21.x、0.22.x)时代的痛点。

随着发展,YARN不仅仅是Hadoop的资源调度框架,还成为一个通用的资源调度管理器,可以将各种各样的计算框架通过YARN管理起来,比如Strom、Spark等。

YARN的基本思想是将资源管理和作业调度/监控的功能分为独立的守护进程。分别是一个全局的 ResourceManager(RM) 和每个应用程序的 ApplicationMaster(AM)。应用程序可以是一个job作业或者一组job作业的有向无环图(DAG)。

ResourceManager负责系统中的所有应用程序的资源分配。NodeManager负责每台机器中容器代理、资源监控(cpu,内存,磁盘,网络),并将这些情况报告给ResourceManager或Scheduler。

每个应用的ApplicationMaster是一个框架特定的库,从ResourceManager协商资源,并与NodeManager共同执行监听任务。

从结构上看,YARN是主/从架构,一个ResourceManager,多个NodeManager,共同构成了数据计算框架。

YARN架构

从上面的结构图来看,YARN主要的组件包括ResourceManager、NodeManager、ApplicationMaster和Container。

1. ResourceManager(RM)

ResourceManager负责整个集群的资源管理和分配,包括处理客户端请求、启动和监控ApplicationMaster、监控NodeManager、资源的分配和调度。

ResourceManager由两个主要组件组成:Scheduler和ApplicationsManager(ASM)。

  • Scheduler:Scheduler根据容量、队列等限制条件(每个队列分配多少资源、最多执行多少个作业等),向运行的应用程序分配资源。Scheduler是一个单纯的调度器,不负责监控功能或跟踪应用程序状态。另外,如果因为应用程序错误或硬件故障任务失败,它不保证重新启动任务。这些都交给ApplicationMaster完成。

    资源分配单位用一个抽象概念“容器”(Container)表示,容器是一个动态资源分配单位,将诸如内存、cpu、磁盘、网络等资源封装在一起,从而限定每个任务使用的资源量

    Scheduler是一个可插拔组件,可以根据自己的需要重新定义。YARN提供了已经实现了多种Scheduler,比如CapacitySchedulerFairScheduler

  • ApplicationsManager:ApplicationsManager负责接收提交的作业,与第一个容器协商来执行应用程序对应的ApplicationMaster,并在容器失败时重启ApplicationMaster。每个应用程序对应的ApplicationMaster负责从Scheduler协商资源容器,并跟踪应用程序状态、监控执行进度。

2. NodeManager(NM)

NodeManager是YARN集群中每个节点上资源和任务管理器,负责当前节点程序的运行、资源的管理和监控。

NodeManager定时向ResourceManager发送本节点资源使用情况、容器运行状态等信息。同时,NodeManager需要执行ResourceManager和ApplicationMaster的命令。

3. ApplicationMaster(AM)

YARN运行的每个应用程序都会有一个ApplicationMaster。负责协调来自ResourceManager的资源,并通过NodeManager监控容器和资源使用(包括内存、CPU等)。

4. YARN工作流程

  1. 客户端向ResourceManager提交应用程序,其中包括ApplicationMaster、启动ApplicationMaster的命令、用户程序等;
  2. ResourceManager为该应用程序分配第一个Container,并与对应NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster;
  3. ApplicationMaster向ResourceManager注册自己,启动成功后与ResourceManager保持心跳;
  4. ApplicationMaster向ResourceManager申请资源;
  5. 申请资源成功后,由ApplicationMaster进行初始化,然后与NodeManager通信,要求NodeManager启动Container。然后ApplicationMaster与NodeManager保持心跳,从而对NodeManager上运行的任务进行监控和管理;
  6. Container运行期间,向ApplicationMaster汇报自己的进度和状态信息,以便ApplicationMaster掌握任务运行状态,从而在任务失败是可以重新启动;
  7. 应用运行结束后,ApplicationMaster向ResourceManager注销自己,允许其所属的Container回收。

参考
1. Apache Hadoop YARN
2. INTRODUCING APACHE HADOOP YAR


个人主页: http://www.howardliu.cn

个人博文: YARN架构

CSDN主页: http://blog.csdn.net/liuxinghao

CSDN博文: YARN架构

### YARN 架构详解及工作原理 #### 1. YARN 的基本概念 YARNHadoop 集群的资源管理系统,旨在解决 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
发出的红包

打赏作者

看山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值