YARN 简析

概述

MapReduce 中,存在有以下几个缺陷:

  • 拓展性差,JobTracker 同时具备资源管理和作业控制两个功能,导致其称为严重的单点性能瓶颈,无法拓展更大的集群
  • 可靠性差:Master/Slave 结构存在单点故障,如果 Master 宕机则会导致整个集群不可用
  • 资源利用率低:MapReduce 是基于槽位的资源分配模型,即对于 Map 任务和 Reduce 任务,会预先定义好资源容器,且无法共享。导致可能产生一种槽位资源紧张,而另一种槽位资源闲置,例如一个作业刚提交时,只有 Map 槽位会被占用,而 Reduce 槽位闲置
  • 无法支持多种计算框架,MapReduce 是离线的数据批处理,无法实现流式或迭代式的计算框架

为了将资源管理功能抽象成一个独立的通用系统,提出了 YARN (Yet Another Resource Negotiator),使得其可以成为一个强大的分布式计算框架,支持多种计算框架,例如 MapReduce 的离线批计算,Spark 的迭代式计算和 Strom 的在线处理。

原来一个计算框架可能是一种计算框架一个集群,但是现在就可以实现一个集群多种计算框架,实现了资源利用率高、运维成本低、数据共享等优点。

框架

YARN 对资源管理和作业控制(作业监控、容错等)进行了解耦,在 MapReduce 中,资源管理和任务控制是耦合在一起的。具体来说,YARN 将资源管理和作业控制分成两个独立的进程,资源管理进程与具体的应用程序无关,他不关心运行的具体程序是什么,只负责整个集群的资源(内存、CPU 等)。而作业控制进程则与应用程序相关,每个作业控制进程只负责管理一个作业。根据计算框架的不同,需要不同的作业控制进程。

YARN 总体来说还是主从结构,其中的角色如下:

  • Client:发出请求的客户端,向 Resource Manager 提出 Job Submission
  • Resource Manager:全局的资源管理器,分为两部分,调度器(Scheduler)和应用程序管理器(Applications Manager),其中调度器负责分配集群的资源,根据 CPU、内存等资源的动态情况对各个应用程序进行资源分配,支持多种调度策略。应用程序管理器负责管理整个系统中的所有应用程序,包括应用程序提交、协商资源分配、启动 Application Master、监控作业运行状态等
  • Application Master:每个应用程序的「主节点」,向 Resource Manager 申请资源,分配任务给「从节点」,与 Node Manager 进行任务控制(启动/停止),监控所有任务运行状态,在失败时重启
  • Node Manager:每个从节点的资源和任务管理器,他会定时向 Resource Manager 汇报本节点上的资源使用情况和各个 Container 的运行状态,同时也会接受 Application Master 启动和停止 Container 的请求
  • Container:对资源的抽象,一个 Container 封装了一个节点上的一部分资源,例如内存、CPU、硬盘等,当 Application Master 向 Resource Manager 申请资源时,返回的资源就是用 Container 表示的,是动态生成的

工作流程

一个简化的工作流程如下:假设计算框架使用的是 MapReduce,这里涉及到 Application Master 的行为

  • 客户端向 Resource Manager 申请 Application,获得对应的 HDFS 路径,随后客户端将资源上传到对应的 HDFS 路径中,资源提交完毕之后再向 Resource Manager 申请创建 Application Master
  • Resource Manager 接着分配第一个 Container,并在其中启动 Application Master,从对应的 HDFS 路径中下载需要的资源到 Container 中
  • 在启动 Application Master(MapReduce Master) 之后,MapReduce Master 首先向 Resource Manager 申请 Map task 的资源,生成 Map 工作节点,Resource Manager 分配资源,并通知 MapReduce Master,随后 MapReduce Master 启动 Map 任务
  • 在 Map 任务完成后,MapReduce Master 向 Resource Manager 申请 Reduce task 的资源,生成 Reduce 工作节点,Resource Manager 分配资源,并通知 MapReduce Master,随后 MapReduce Master 启动 Reduce 任务
  • 最终程序运行结束,MapReduce Master 向 Resource Manager 注销,并关闭自己

对于其他的计算框架,只需要改变对应的 Application Master 的程序行为即可,同时一个集群可以支持多个计算框架的同时运行。

多角度理解

假如把 YARN 看作是一个操作系统,那么申请一个计算框架的运行就相当于启动一个进程,而该进程会自动向操作系统申请资源,并启动各自的线程来完成计算任务,在计算任务完成后,向操作系统申请结束进程。

而资源抽象化,使用 Resource Manager 统一调度和分配,就可以避免服务之间因抢占资源而相互干扰,将计算的业务逻辑和资源分配进行了解耦,使系统更加灵活。

所以可以将 YARN 看作是把现代操作系统的思想应用中分布式系统中,只不过将信息交换从本地硬件内的电流变成了网络中的报文,本质上的思想是一致的。

上一篇 下一篇

评论 | 0条评论