YARN架构与任务提交流程详解
1. YARN的组成架构
YARN(Yet Another Resource Negotiator)是Hadoop生态系统中的一个重要组成部分,主要用于资源管理和调度。YARN的架构主要由以下几个关键组件构成:
1.1 ResourceManager(RM)
ResourceManager是YARN的核心组件,负责整个集群的资源管理和调度。其主要职责包括:
- 资源调度:接收来自客户端程序提交的请求,根据资源需求分配容器(Container)。
- 监控集群资源使用情况:实时监控集群中资源的使用状态。
- 主要子组件:
- 调度器(Scheduler):根据资源需求和调度策略分配Container。
- 应用程序管理器(ApplicationManager):负责管理应用程序的生命周期,从启动到完成的全过程。
1.2 NodeManager(NM)
NodeManager负责单个节点上的资源管理。每个节点上运行一个NodeManager,主要功能包括:
- 资源管理:管理该节点上的所有资源,处理来自ResourceManager和ApplicationMaster的命令。
- 监控Container:监控Container的资源使用情况,并定期向ResourceManager发送心跳信号,以报告资源状态。
1.2.1 ApplicationMaster(AM)
每个应用程序都有一个独立的ApplicationMaster,负责:
- 与ResourceManager通信:协调应用程序的资源请求和任务执行。
- 资源申请:向ResourceManager申请运行任务所需的Container。
1.2.2 Container
Container是YARN中任务运行的基本单位,主要特点包括:
- 资源封装:封装了CPU、内存等资源概念。
- 任务执行:RM将资源分配给ApplicationMaster后,创建Container来运行应用程序的任务。
2. YARN的任务提交流程
YARN的任务提交流程主要分为以下几个步骤:
2.1 提交作业
用户通过客户端向ResourceManager提交作业,包括应用程序代码和所需资源的定义。
2.2 资源请求
ResourceManager收到作业提交请求后,分配一个初始Container来启动ApplicationMaster。
2.3 启动ApplicationMaster
ApplicationMaster在分配的Container中启动,并向ResourceManager进行注册,确认其身份。
2.4 申请资源
ApplicationMaster根据任务需求向ResourceManager申请更多运行任务所需的Container。
2.5 分配资源
ResourceManager根据集群的资源情况,分配所需的Container,并通知ApplicationMaster。
2.6 启动任务
ApplicationMaster与NodeManager进行通信,启动任务Container。
2.7 任务执行
任务在分配的Container中执行,完成后将结果反馈给ApplicationMaster。
2.8 作业完成
ApplicationMaster向ResourceManager报告作业完成,并释放资源,确保资源的高效利用。
3. YARN调度器
YARN的调度器是资源分配的核心,根据不同的需求提供多种调度策略:
3.1 FIFO调度器
- 先进先出:所有提交的作业在一个队列中进行服务,按照提交的顺序来运行,先来先服务。
3.2 Capacity Scheduler
- 容量调度器:将整个集群的资源划分为多个队列,每个队列之间的资源互不干扰。支持生产和开发环境的划分,可以在每个队列内部使用FIFO调度策略。
3.3 Fair Scheduler(公平调度器)
- 公平调度器:支持多个队列,每个队列配置一定的资源,确保每个队列中的任务公平共享资源。任务优先级越高,分配到的资源也越多,确保每个任务都能获得足够的资源。