【YARN 权威指南】2. YARN 的架构介绍


由于第二章为 Hadoop 环境安装内容,此处略过。环境安装可以参考:Ambari 的安装文档

1. Hadoop 架构的变迁

Hadoop 架构的变化

YARN 提供了运行非 MapReduce 应用的新能力,为 Hadoop 生态增加了很多新特性。

2. YARN 的架构介绍

YARN 架构图

YARN 依赖三个核心组件来实现资源管理和任务调度:

  1. ResourceManager(RM):集群资源的仲裁者,主要由可插拔的调度器 Scheduler 和管理应用生命周期的 ApplicationsManager 组成。
  2. NodeManager(NM):NM 位于每个计算节点上,负责管理该节点上的 Container,并向 ResourceManager 汇报节点资源和 Container 状态。
  3. ApplicationMaster(AM):用户作业生命周期的管理者。每个应用都会启动自己的 ApplicationMaster,用于向 ResourceManager 申请资源,并协调 NodeManager 运行具体任务。

这三个组件共同提供了一个可扩展、灵活、高效的环境来运行各种类型的大数据处理作业。

2.1 ResourceManager

  • ResourceManager 拥有为系统中所有应用分配资源的决定权,可以基于内存、CPU、磁盘以及网络等多个资源维度为各个应用分配资源。
  • ResourceManager 是一个纯粹的调度器,它根据应用程序的资源请求,严格限制系统的可用资源,在保证容量、公平性以及服务等级(SLA)的前提下,优化集群资源利用率,让所有资源都被充分利用。
  • ResourceManager 有一个可插拔的调度器(Scheduler)来使用不同的调度算法。Scheduler 负责应用不同的调度算法为运行中的各个应用分配资源,有些算法注重容量,有些注重公平等,分配资源时会受到容量队列以及其他因素的制约。
  • Scheduler 基于应用程序的资源需求来执行调度功能,使用了资源 Container 这个抽象概念,其中包括了多种资源维度,如内存、CPU、磁盘以及网络等。
  • Scheduler 是一个纯粹的调度器,不负责对应用程序的状态进行监控与追踪,也不会在应用程序失败的情况下对任务进行重启。

2.2 NodeManager

NodeManager 是部署在计算节点上的从属进程,负责启动应用程序的 Container,并监控它们的资源(内存、CPU、磁盘以及网络等)使用情况,然后将其报告给 ResourceManager。

NodeManager 和 ResourceManager 组成了新的通用系统以分布式的方式管理应用。

2.3 ApplicationMaster

  • ApplicationMaster 是特定框架库的一个实例。
  • ApplicationMaster 也是一个普通的 Container。
  • ApplicationMaster 与应用程序一一对应,为一组应用提供一个 ApplicationMaster 也是可行的,例如 Hive 的 ApplicationMaster。
  • ApplicationMaster 向 ResourceManager 申请应用程序所需的资源 Container。
  • ApplicationMaster 与 NodeManager 协同工作,监控 Container 的状态、执行进度和资源使用情况。

ApplicationMaster 的增加使 YARN 可以提供以下新的特性:

  1. 扩展性:将容错功能转移到 ApplicationMaster 中,控制就变得局部化而不是全局化,也使 ResourceManager 可以作为纯粹的调度器,不必提供跨集群的资源容错等功能。ApplicationMaster 与应用程序一一对应,基本不会成为集群的瓶颈。
  2. 开放性:将所有应用框架相关代码都转移到 ApplicationMaster,使系统变得通用。这样就可以支持 MapReduce、MPI、图计算等多种框架。

ApplicationMaster 本质上还是客户端代码,不能完全信任。因此 YARN 必须保护自身,避免受到错误或恶意 ApplicationMaster 的影响,并控制所有资源授权。

2.4 Container

  • Container 是一个单节点上内存、CPU、磁盘等物理资源的集合。
  • Container 由 ResourceManager 进行调度,由 NodeManager 进行监控。
  • 单个节点上可以有多个 Container。
  • 单个节点可以被划分为多个 Container,每个 Container 都对应一定数量的内存和 CPU 资源。
  • ApplicationMaster 可以请求 Container 来占据最小容量整数倍的资源。一个应用程序从 ApplicationMaster 开始,而 ApplicationMaster 本身就是一个 Container。
  • ApplicationMaster 启动后会向 ResourceManager 申请更多的 Container,并在运行中动态申请和释放 Container。例如,一个 MapReduce 作业可以请求一定数量的 Map Container。当 Map 计算结束时,它会释放 Map Container,并请求更多的 Reduce Container。

2.5 资源模型

YARN 提供了非常通用的资源模型。一个应用(ApplicationMaster)可以请求非常具体的资源:

  • 资源名称(包括主机名称、机架名称、复杂的网络拓扑等)
  • 内存
  • CPU(核数、类型)
  • 其他资源(disk、network I/O、GPU 等)

2.6 资源请求

ResourceManager 在调度资源时能够感知集群的网络拓扑,以便尽可能减少数据移动,优化数据访问。
ResourceManager 内的调度器会保存应用程序的资源需求信息,以帮助集群中的所有应用做出更优的调度决策。
ApplicationMaster 请求特定资源来满足计算需求,Scheduler 会分配一个 Container 来响应请求,以满足 ApplicationMaster 的 ResourceRequest 需求。
ResourceRequest 会提出 <资源名称,优先级,资源需求,Container 数> 需求:

  • 资源名称:资源期望所在的主机名,机架等
  • 优先级:应用内部请求的优先级
  • 资源需求:需求的资源量,常见资源维度包括内存和 CPU
  • Container 数:需要的 Container 数量

2.7 应用提交流程

YARN 的架构可以通过一次应用提交过程串起来理解:

  1. Client 向 ResourceManager 提交应用程序,包括启动 ApplicationMaster 所需的 jar 包、命令、环境变量和资源需求。
  2. ResourceManager 接收请求后,为 ApplicationMaster 分配第一个 Container。
  3. 对应节点上的 NodeManager 启动 ApplicationMaster。
  4. ApplicationMaster 启动后向 ResourceManager 注册,并根据任务需求继续申请 Container。
  5. ResourceManager 通过 Scheduler 分配 Container,ApplicationMaster 再和对应 NodeManager 通信,让 NodeManager 启动具体任务。
  6. 任务运行过程中,NodeManager 持续汇报 Container 状态,ApplicationMaster 负责跟踪任务进度和失败重试。
  7. 应用完成后,ApplicationMaster 向 ResourceManager 注销,相关 Container 资源被释放。

文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
  目录