YARN组织架构


1. YARN 集群的架构和工作原理

  YARN 的基本设计思想是将 MapReduce V1 中的 JobTracker 拆分为两个独立的服务:ResourceManager 和 ApplicationMaster。

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

调度器根据容量、队列等限制条件,将系统中的资源分配给正在运行的应用程序,在保证容量、公平性和服务等级的前提下,优化集群资源利用率,让所有的资源都被充分利用
应用程序管理器负责管理整个系统中的所有的应用程序,包括应用程序的提交、与调度器协商资源以启动 ApplicationMaster、监控ApplicationMaster 运行状态并在失败时重启它

  1. ApplicationMaster (负责单个应用程序的的管理):用户提交的一个应用程序会对应于一个ApplicationMaster,它的主要功能有:
  • 与 RM 调度器协商以获得资源,资源以 Container 表示。
  • 将得到的任务进一步分配给内部的任务。
  • 与 NM 通信以启动/停止任务。
  • 监控所有的内部任务状态,并在任务运行失败的时候重新为任务申请资源以重启任务
  1. NodeManager: NodeManager 是每个节点上的资源和任务管理器,一方面,它会定期地向 RM 汇报本节点上的资源使用情况和各个 Container 的运行状态;另一方面,他接收并处理来自 AM 的 Container 启动和停止请求。
  2. Container: Container 是 YARN 中的资源抽象,封装了各种资源。一个应用程序会分配一个 Container,这个应用程序只能使用这个 Container 中描述的资源。Container 是一个动态资源的划分单位,更能充分利用资源

2. YARN的任务提交流程

  当向YARN提交一个应用程序之后,YARN将分两个阶段运行程序:一是启动ApplicationMaster;二是由ApplicationMaster创建应用程序,然后为他申请资源,监控程序的运行,直至结束。

具体步骤:
(1)用户向YARN提交一个应用程序,并指定ApploicationMaster程序;

(2)ResourceManager为这个应用程序分配一个Container,并与对应的NodeManager通讯,在这个Container中启动ApplicationMaster。

(3)ApplicationMaster向ResourceManager注册,然后拆分任务分配给内部,为各个拆分的任务申请资源,然后监控这些任务的运行,知道结束。

(4)ApplicationMaster采用轮询的方式向RM申请资源。

(5)AM申请到资源后,与对应的NodeManager通讯,以启动任务。

(6)任务启动后,各个任务会向AM报告自己的状态和进度,以便任务失败时,AM可以重新申请资源重启任务。

(7)任务完成后,AM向RM注销并关闭自己。

3. YARN 的资源调度三种模型

  在 Yarn 中有三种调度器可以选择:FIFO Scheduler ,Capacity Scheduler,Fair Scheduler。
  Apache 版本的 hadoop 默认使用的是 Capacity Scheduler 调度方式。CDH 版本的默认使用的是 Fair Scheduler 调度方式
FIFO Scheduler(先来先服务):
  FIFO Scheduler 把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配,以此类推。
  FIFO Scheduler 是最简单也是最容易理解的调度器,也不需要任何配置,但它并不适用于共享集群。大的应用可能会占用所有集群资源,这就导致其它应用被阻塞,比如有个大任务在执行,占用了全部的资源,再提交一个小任务,则此小任务会一直被阻塞。
Capacity Scheduler(容量/能力调度器)
  对于 Capacity 调度器,有一个专门的队列用来运行小任务,但是为小任务专门设置一个队列会预先占用一定的集群资源,这就导致大任务的执行时间会落后于使用 FIFO 调度器时的时间。
Fair Scheduler(公平调度器)
  在 Fair 调度器中,我们不需要预先占用一定的系统资源,Fair 调度器会为所有运行的 job 动态的调整系统资源。
  比如:当第一个大 job 提交时,只有这一个 job 在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair 调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。
  需要注意的是,在 Fair 调度器中,从第二个任务提交到获得资源会有一定的延迟,因为它需要等待第一个任务释放占用的 Container。小任务执行完成之后也会释放自己占用的资源,大任务又获得了全部的系统资源。最终的效果就是 Fair调度器即得到了高的资源利用率又能保证小任务及时完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值