写点什么

Yarn 的架构和原理

发布于: 2021 年 05 月 07 日
Yarn的架构和原理

YARN 的基本设计思想是将 MapReduce V1 中的 JobTracker 拆分为两个独立的服务:ResourceManager 和 ApplicationMaster。ResourceManager 负责整个系统的资源管理和分配,ApplicationMaster 负责单个应用程序的的管理。



  • ResourceManager


RM 是一个全局的资源管理器,负责整个系统的资源管理和分配,它主要由两个部分组成:调度器(Scheduler)和应用程序管理器(Application Manager)。

调度器根据容量、队列等限制条件,将系统中的资源分配给正在运行的应用程序,在保证容量、公平性和服务等级的前提下,优化集群资源利用率,让所有的资源都被充分利用

应用程序管理器负责管理整个系统中的所有的应用程序,包括应用程序的提交、与调度器协商资源以启动 ApplicationMaster、监控 ApplicationMaster 运行状态并在失败时重启它。


  • ApplicationMaster


用户提交的一个应用程序会对应于一个 ApplicationMaster,它的主要功能有:

a.与 RM 调度器协商以获得资源,资源以 Container 表示。

b.将得到的任务进一步分配给内部的任务。

c.与 NM 通信以启动/停止任务。

d.监控所有的内部任务状态,并在任务运行失败的时候重新为任务申请资源以重启任务。


  • nodeManager


NodeManager 是每个节点上的资源和任务管理器,一方面,它会定期地向 RM 汇报本节点上的资源使用情况和各个 Container 的运行状态;另一方面,他接收并处理来自 AM 的 Container 启动和停止请求。


  • container


Container 是 YARN 中的资源抽象,封装了各种资源。一个应用程序会分配一个 Container,这个应用程序只能使用这个 Container 中描述的资源。

不同于 MapReduceV1 中槽位 slot 的资源封装,Container 是一个动态资源的划分单位,更能充分利用资源。

4.4 yarn 的任务提交流程


​ 当 jobclient 向 YARN 提交一个应用程序后,YARN 将分两个阶段运行这个应用程序:一是启动 ApplicationMaster;第二个阶段是由 ApplicationMaster 创建应用程序,为它申请资源,监控运行直到结束。


具体步骤如下:


  • 用户向 YARN 提交一个应用程序,并指定 ApplicationMaster 程序、启动 ApplicationMaster 的命令、用户程序。

  • RM 为这个应用程序分配第一个 Container,并与之对应的 NM 通讯,要求它在这个 Container 中启动应用程序 ApplicationMaster。

  • ApplicationMaster 向 RM 注册,然后拆分为内部各个子任务,为各个内部任务申请资源,并监控这些任务的运行,直到结束。

  • AM 采用轮询的方式向 RM 申请和领取资源。

  • RM 为 AM 分配资源,以 Container 形式返回

  • AM 申请到资源后,便与之对应的 NM 通讯,要求 NM 启动任务。

  • NodeManager 为任务设置好运行环境,将任务启动命令写到一个脚本中,并通过运行这个脚本启动任务

  • 各个任务向 AM 汇报自己的状态和进度,以便当任务失败时可以重启任务。

  • 应用程序完成后,ApplicationMaster 向 ResourceManager 注销并关闭自己

resourceManager 基本介绍

​ ResourceManager 负责集群中所有资源的统一管理和分配,它接收来自各个 NodeManager 的资源汇报信息,并把这些信息按照一定的策略分配给各个 ApplicationMaster。

1 RM 的职能

  • 与客户端交互,处理客户端的请求。

  • 启动和管理 AM,并在它运行失败时候重新启动它。

  • 管理 NM,接收来自于 NM 的资源汇报信息,并向 NM 下达管理指令。

  • 资源管理和调度,接收来自于 AM 的资源请求,并为它分配资源。

2 RM 的内部结构


  • 用户交互模块:

  • clientRMService : 为普通用户服务,处理请求,如:提交应用程序、终止程序、获取程序状态

  • adminService : 给管理员提供的服务。普通用户交互模块是 ClientRMService,管理员交互模块是 AdminService,之所以要将两个模块分开,用不同的通信通道发送给 ResourceManager,是因为要避免普通用户的请求过多导致管理员请求被阻塞

  • WebApp : 更友好的展示集群资源和程序运行状态

  • NM 管理模块:

  • NMLivelinessMonitor : 监控 NM 是否活着,如果指定时间内未收到心跳,就从集群中移除。RM 会通过心跳告诉 AM 某个 NM 上的 Container 失效,如果 Am 判断需要重新执行,则 AM 重新向 RM 申请资源。

  • NodesListManager : 维护 inlude(正常)和 exlude(异常)的 NM 节点列表。默认情况下,两个列表都为空,可以由管理员添加节点。exlude 列表里的 NM 不允许与 RM 进行通信。

  • ResourceTrackerService : 处理来自 NM 的请求,包括注册和心跳。注册是 NM 启动时的操作,包括节点 ID 和可用资源上线等。心跳包括各个 Container 运行状态,运行 Application 列表、节点健康状态

  • AM 管理模块 :

  • AMLivelinessMonitor : 监控 AM 是否还活着,如果指定时间内没有接受到心跳,则将正在运行的 Container 置为失败状态,而 AM 会被重新分配到另一个节点上

  • ApplicationMasterLauncher: 要求某一个 NM 启动 ApplicationMaster,它处理创建 AM 的请求和 kill AM 的请求

  • ApplicationMasterService : 处理来自 AM 的请求,包括注册、心跳、清理。注册是在 AM 启动时发送给 ApplicationMasterService 的;心跳是周期性的,包括请求资源的类型、待释放的 Container 列表;清理是程序结束后发送给 RM,以回收资源清理内存空间;

  • Application 管理模块 :

  • ApplicationACLLsManager : 管理应用程序的访问权限,分为查看权限和修改权限。

  • RMAppManager : 管理应用程序的启动和关闭

  • ContainerAllocationExpirer : RM 分配 Container 给 AM 后,不允许 AM 长时间不对 Container 使用,因为会降低集群的利用率,如果超时(时间可以设置)还没有在 NM 上启动 Container,RM 就强制回收 Container。

  • 状态机管理模块 :

  • RMApp : RMApp 维护一个应用程序的的整个运行周期,一个应用程序可能有多个实例,RMApp 维护的是所有实例的

  • RMAppAttempt : RMAppAttempt 维护一个应用程序实例的一次尝试的整个生命周期

  • RMContainer : RMContainer 维护一个 Container 的整个运行周期(可能和任务的周期不一致)

  • RMNode : RMNode 维护一个 NodeManager 的生命周期,包括启动到运行结束的整个过程。

  • 安全模块 :

  • RM 自带了全面的权限管理机制。主要由 ClientToAMSecretManager、ContainerTokenSecretManager、ApplicationTokenSecretManager 等模块组成。

  • 资源分配模块 :

  • ResourceScheduler:ResourceScheduler 是资源调度器,他按照一定的约束条件将资源分配给各个应用程序。RM 自带了一个批处理资源调度器(FIFO)和两个多用户调度器 Fair Scheduler 和 Capacity Scheduler

发布于: 2021 年 05 月 07 日阅读数: 48
用户头像

专注于大数据技术研究 2020.11.10 加入

运营公众号:五分钟学大数据。大数据领域原创技术号,深入大数据技术

评论

发布
暂无评论
Yarn的架构和原理