基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

什么是 YARN 的 Application(应用程序)?

知识点图片

在 Apache Hadoop YARN (Yet Another Resource Negotiator) 的架构中,Application(应用程序) 是指提交给 YARN 集群执行的一个完整的计算任务或作业(Job)

YARN 是一个纯粹的资源管理系统,它本身不关心你要做什么计算。为了让各种不同的计算框架(如 MapReduce、Spark、Flink 等)都能在 YARN 上运行,YARN 抽象出了“Application”这个概念作为最高级别的计算单位。

为了更好地理解 YARN Application,我们可以从它的核心组件运行流程以及具体实例三个方面来剖析:

1. Application 的核心组件

每一个在 YARN 上运行的 Application,都必然包含以下几个核心部分:

  • ApplicationMaster (AM,应用管理器)
    • 地位:它是每一个 Application 的“大脑”或“大管家”。每个 Application 都有且仅有一个专属的 ApplicationMaster
    • 职责:它负责向 YARN 的资源管理器(ResourceManager)申请资源(CPU和内存),并将这些资源分配给具体的任务(Task)。它还要负责监控任务的运行状态,如果任务失败了,它负责重新启动该任务。
  • Container(容器)
    • 地位:YARN 中的资源抽象单位。它封装了某个节点上的一定量的 CPU 和内存。
    • 职责:Application 的所有代码都在 Container 中运行。ApplicationMaster 自己运行在一个特殊的 Container 中,而具体的计算任务(Task)运行在 ApplicationMaster 申请来的其他 Container 中。
  • Task(具体任务)
    • 地位:Application 被拆分后的最小执行单元。
    • 职责:执行真正的数据处理工作。

2. Application 的生命周期(运行流程)

当你在客户端提交一个 Application 到 YARN 时,通常会经历以下步骤:

  1. 提交申请:客户端(Client)将 Application 提交给 YARN 的主节点 ResourceManager (RM)
  2. 启动 AM:RM 接受请求后,会在集群的某个从节点(NodeManager)上分配第一个 Container,并在其中启动这个 Application 的 ApplicationMaster
  3. 计算资源需求:ApplicationMaster 启动后,会根据程序的逻辑(比如有多少数据要处理)计算出需要多少个 Container,并向 RM 申请这些资源。
  4. 分配并执行任务:RM 批准资源后,ApplicationMaster 会与对应的 NodeManager 通信,在分配到的 Container 中启动具体的 Task
  5. 状态监控:在运行过程中,各个 Task 会向 ApplicationMaster 汇报进度;ApplicationMaster 则向 RM 汇报自身的状态(心跳)。
  6. 执行完成:所有 Task 执行完毕后,ApplicationMaster 向 RM 注销自己,释放所有 Container 资源,Application 宣告结束。

3. 具体框架中的 Application 实例

由于 YARN 是通用的,不同的计算引擎对“Application”的定义表现形式略有不同:

  • Hadoop MapReduce:你提交的一个完整的 MapReduce 作业(包含 Map 阶段和 Reduce 阶段),在 YARN 看来就是一个 Application。它的 ApplicationMaster 叫 MRAppMaster
  • Apache Spark:你在 Spark 中创建的一个 SparkContextSparkSession(无论是 batch 还是 streaming),提交到 YARN 后就是一个 Application。Spark 的 Driver 程序通常就充当了 ApplicationMaster 的角色(在 yarn-cluster 模式下),而 Executor 则运行在 YARN 提供的 Container 中。
  • Apache Flink:提交的一个 Flink Job(或者一个 Flink Session 集群),在 YARN 中也是一个 Application。Flink 的 JobManager 运行在 ApplicationMaster 所在的 Container 中,TaskManager 运行在其他的 Container 中。

总结

简单来说,YARN 的 Application 就是你向集群提交的一次“干活的请求”。YARN 为这个请求分配一个专属的“项目经理(ApplicationMaster)”和所需的“工位与设备(Container)”,由项目经理负责把活干完,干完后将所有资源交还给公司(YARN 集群)。

00:00
00:00