了解 YARN 架构的基础知识
- [1.为什么是 YARN](#1.为什么是 YARN)
- [2.YARN 简介](#2.YARN 简介)
- [3.YARN 的组成部分](#3.YARN 的组成部分)
-
- [3.1 Resource Manager 资源管理器](#3.1 Resource Manager 资源管理器)
-
- [3.1.1 Scheduler 调度程序](#3.1.1 Scheduler 调度程序)
- [3.1.2 Application Manager 应用程序管理器](#3.1.2 Application Manager 应用程序管理器)
- [3.2 Node Manager 节点管理器](#3.2 Node Manager 节点管理器)
- [3.3 Application Master 应用程序主控](#3.3 Application Master 应用程序主控)
- [3.4 Container 容器](#3.4 Container 容器)
- [4.在 YARN 中提交应用程序](#4.在 YARN 中提交应用程序)
- [5.Hadoop YARN 中的应用程序工作流程](#5.Hadoop YARN 中的应用程序工作流程)
Hadoop YARN(Yet Another Resource Negotiator)将 Hadoop 的存储单元即 HDFS(Hadoop 分布式文件系统)与各种处理工具编织在一起。
1.为什么是 YARN
在 Hadoop 1.0
版本,也称为 MRV1
(MapReduce Version 1
),MapReduce 执行处理和资源管理功能。它由一个 作业跟踪器(Job Tracker
)组成,它是唯一的主机。作业跟踪器分配资源、执行调度并监控处理作业。它在许多称为 任务跟踪器(Task Trackers
)的从属进程上分配映射和归约任务。任务跟踪器定期向作业跟踪器报告其进度。
由于单个作业跟踪器,这种设计导致了可扩展性瓶颈。 IBM 在其文章中提到,根据 Yahoo 的说法,当集群包含 5000 5000 5000 个节点和同时运行 40000 40000 40000 个任务时,这种设计就达到了实际极限。除了这一限制之外,MRV1 中计算资源的利用效率较低。此外,Hadoop 框架仅限于 MapReduce 处理范例。
为了克服所有这些问题,雅虎和 Hortonworks 于 2012 年在 Hadoop 2.0
版本中引入了 YARN。 YARN 背后的基本思想是通过 接管资源管理和作业调度 的职责来减轻 MapReduce 的负担。 YARN 开始赋予 Hadoop 在 Hadoop 框架内运行非 MapReduce 作业的能力。
随着 YARN 的推出,Hadoop 生态系统发生了彻底的变革。它变得更加灵活、高效和可扩展。当雅虎在 2013 年第一季度启用 YARN 时,它帮助该公司将 Hadoop 集群的规模从 40000 40000 40000 个节点缩小到 32000 32000 32000 个节点。但就业岗位数量却翻了一番,达到每月 2600 万个。
2.YARN 简介
现在我已经让您了解了 YARN 的必要性,接下来让我向您介绍 Hadoop 2.0
的核心组件 YARN。 YARN 允许图形处理、交互式处理、流处理以及批处理等不同的数据处理方法来运行和处理存储在 HDFS 中的数据。因此,YARN 将 Hadoop 开放给 MapReduce 之外的其他类型的分布式应用程序。
YARN 使用户能够根据需要使用各种工具执行操作,例如用于实时处理的 Spark、用于 SQL 的 Hive、用于 NoSQL 的 HBase 等。
除了 资源管理 之外,YARN 还执行 作业调度。 YARN 通过分配资源和调度任务来执行所有处理活动。 Apache Hadoop YARN 架构由以下主要组件组成:
- 资源管理器(
Resource Manager
):在主守护进程上运行并管理集群中的资源分配。 - 节点管理器(
Node Manager
):它们在从属守护进程上运行,负责在每个数据节点上执行任务。 - 应用程序主控(
Application Master
):管理各个应用程序的用户作业生命周期和资源需求。它与节点管理器一起工作并监视任务的执行。 - 容器(
Container
):单个节点上的 RAM、CPU、网络、HDD 等资源的封装。
3.YARN 的组成部分
您可以将 YARN 视为 Hadoop 生态系统的大脑。下图代表了 YARN 架构。
3.1 Resource Manager 资源管理器
- 它是资源配置的最终权威。
- 收到处理请求后,它将部分请求相应地传递给相应的节点管理器,在节点管理器中进行实际处理。
- 它是集群资源的仲裁者,决定竞争应用程序的可用资源分配。
- 优化集群利用率,例如根据容量保证、公平性和 SLA 等各种限制保持所有资源始终处于使用状态。
它有两个主要组件:
3.1.1 Scheduler 调度程序
- 调度程序负责将资源分配给受容量、队列等约束的各种正在运行的应用程序。
- 它在 ResourceManager 中被称为纯调度程序,这意味着它不会对应用程序的状态执行任何监视或跟踪。
- 如果出现应用程序故障或硬件故障,调度程序不保证重新启动失败的任务。
- 根据应用程序的资源需求进行调度。
- 它有一个可插入的策略插件,负责在各个应用程序之间划分集群资源。有两个这样的插件:
Capacity Scheduler
和Fair Scheduler
,目前在 ResourceManager 中用作调度程序。
3.1.2 Application Manager 应用程序管理器
- 它负责接受作业提交。
- 协商资源管理器中的第一个容器来执行应用程序特定的应用程序主程序。
- 管理集群中运行的 Application Master,并提供在失败时重新启动 Application Master 容器的服务。
3.2 Node Manager 节点管理器
- 它负责 Hadoop 集群中的各个节点,并管理给定节点上的用户作业和工作流程。
- 它向资源管理器注册并发送包含节点健康状态的心跳。
- 它的主要目标是管理资源管理器分配给它的应用程序容器。
- 它与资源管理器保持同步。
- 应用程序主机通过向节点管理器发送容器启动上下文(CLC)来请求分配的容器,其中包含应用程序运行所需的所有内容。节点管理器创建请求的容器进程并启动它。
- 监控各个容器的资源使用情况(内存、CPU)。
- 执行日志管理。
- 它还按照资源管理器的指示杀死容器。
3.3 Application Master 应用程序主控
- 应用程序是提交给框架的单个作业。每个应用程序都有一个与之关联的唯一应用程序主控器,它是框架的一个特定实体。
- 它是协调集群中应用程序的执行并管理故障的进程。
- 它的任务是从资源管理器协商资源并与节点管理器一起执行和监视组件任务。
- 它负责与 ResourceManager 协商适当的资源容器,跟踪它们的状态并监控进度。
- 一旦启动,它会定期向资源管理器发送心跳,以确认其运行状况并更新其资源需求的记录。
3.4 Container 容器
- 它是单个节点上 RAM、CPU 内核和磁盘等物理资源的集合。
- YARN 容器由容器启动上下文(即容器生命周期,CLC)管理。该记录包含环境变量的映射、存储在远程可访问存储中的依赖项、安全令牌、节点管理器服务的有效负载以及创建进程所需的命令。
- 它授予应用程序在特定主机上使用特定数量的资源(内存、CPU 等)的权利。
4.在 YARN 中提交应用程序
- 1 提交作业
- 2 获取应用程序 ID
- 3 提交应用程序上下文
- 4.a 启动容器
- 4.b 启动应用程序主程序
- 5 分配资源
- 6.a 容器
- 6.b 启动
- 7 执行
5.Hadoop YARN 中的应用程序工作流程
- 1.客户端(
Client
)提交申请 - 2.资源管理器(
Resource Manager
)分配一个容器来启动应用程序管理器(Application Manager
) - 3.应用程序管理器(
Application Manager
)向资源管理器(Resource Manager
)注册 - 4.应用程序管理器(
Application Manager
)向资源管理器(Resource Manager
)询问容器 - 5.应用程序管理器(
Application Manager
)通知节点管理器(Node Manager
)启动容器 - 6.应用程序代码在容器中执行
- 7.客户端联系资源管理器(
Resource Manager
)/ 应用程序管理器(Application Manager
),以监控应用程序的状态 - 8.应用程序管理器(
Application Manager
)向资源管理器(Resource Manager
)取消注册