【Hadoop】关于Yarn的一些学习笔记(Hadoop权威指南读书笔记等)

Apache Yarn全称是:Yet Another Resource Negotiator,是Hadoop的集群资源管理系统。

Yarn提供请求和使用集群资源的API,却很少直接用于用户代码。对用户隐藏了资源管理的细节。

1 Yarn运行机制

Yarn通过两类长期运行的守护进程提供自己的核心服务:

  • Resource Manager(资源管理器)
    • 管理集群资源
  • Node Manager(节点管理器)
    • 运行在集群所有节点上
    • 启动和监控Container(容器)

1.1 资源请求

Yarn有一个灵活的资源请求模型。但请求多个容器时,可以指定每个容器需要的计算机资源数量(内存和CPU),还可以指定对容器的本地限制要求

  • 本地限制:可用于申请位于指定节点或机架,或集群中任何位置(机架外)的容器。

Yarn应用可以在运行中的任意时刻提出资源申请

  • 可以在最开始提出所有的请求(例如:Spark)
  • 为了满足不断变化的应用的需要,采取更为动态的方式在需要更多资源时提出请求

1.2 应用生命期

Yarn应用生命期差异性很大:有几秒钟的短期应用,也有连续几天甚至几个月的长期应用。

可以按照:应用到用户运行的作业之间的映射关系,对应用进行分类:

  • 一个用户作业对应一个应用,如:MapReduce
  • 作业的每个工作流/每个用户对话对应一个应用,如:Spark
  • 多个用户共享的一个长期运行的应用

2 Yarn 与 MapReduce1 相比

MapReduce1中,有两类守护进程控制着作业执行过程:

  • 一个jobtracker
    • 通过调度tasktracker上运行的任务来协调所有运行在系统上的作业
  • 一个或多个tasktracker
    • tasktracker在运行任务的同时将运行进度报告发送给jobtracker
    • jobtracker由此记录每项作业任务的整体进度情况

MapReduce1中,jobtracker同时负责作业调度和认为进度监控。在Yarn中,这些职责由不同的实体负责:Resource Manager和Application Master。

2.1 Yarn的好处

  • 可扩展性
  • 可用性
  • 利用率
    • MapReduce1中,每个jobtracker都配置有若干固定长度的slot
    • Yarn中,一个Node Manager管理一个资源池,而不是指定的固定数目的slot
  • 多租户
    • Yarn的最大优点在于,向MapReduce以外的其它类型的分布式应用开放了Hadoop

3 Yarn中的调度

Yarn有三种调度器可用:

  • FIFO调度器
  • 容量调度器
  • 公平调度器

3.1 FIFO调度器

优点:简单易懂,不需要任何配置

缺点:不适合共享集群。大的应用会占用集群中的所有资源,所以每个应用必须等待直到轮到自己运行。

在一个共享集群中,更适合使用容量调度器或公平调度器。
这两种调度器都允许长时间运行的作业能及时完成,同时也允许正在进行较小临时查询的用户能够在合理时间内得到返回结果

3.2 容量调度器

容量调度器允许多个组织共享一个Hadoop集群,每个组织可以分配到全部集群资源的一部分。

每个组织被配置为一个专门的队列,可以使用一定的集群资源。

每个队列内,使用FIFO调度策略对应用进行调度。

单个队列使用的资源不会超过其队列的容量。如果队列中有多个作业,并且队列资源不够用时,如果仍有空闲的资源,那么容量调度器可能会将空余的资源分配给队列中的作业。

为队列设置一个最大容量限制,这样队列就不会过多地侵占其他队列的容量了。

3.3 公平调度器

公平调度器旨在为所有运行的应用公平分配资源。

启用公平调度器,由yarn.resourcemanager.scheduler.class的设置所决定的。默认使用容量调度器(CDH中默认使用公平调度器)。

每个队列可以有不同的调度策略。队列的默认调度策略可以通过顶层元素defaultQueueSchedulingPolicy进行设置,如果省略,默认使用公平调度。

每个队可以配置最大和最小资源数量,及最大可运行的应用的数量。

公平调度器使用一个基于规则的系统来确定应用应该放到哪个队列。queuePlacementPlolicy元素包含了一个规则列表,每条规则会被依次尝试直到匹配成功。

  • specified:表示把应用放进指明的队列中,如果没有指明,或如果所指明的队列不存在,则规则不匹配,继续尝试下一条规则
  • primaryGroup规则:把应用放在用户的主Unix组名命名的队列中,如果没有这样的队列,则继续尝试下一条规则而不是创建队列
  • Default规则:当前述规则都不匹配时,将启用该条规则,把应用放进dev.eng队列中
<queuePlacementPlolicy>
	<rule name="specified"/>
	<rule name="user"/>
</queuePlacementPolicy>

抢占

在一个繁忙的集群中,当作业被提交给一个空队列时,作业不会立即启动,直到集群上已经运行的作业释放了资源。为了使作业从提交到执行所需的时间可预测,公平调度器支持“抢占”功能。

所谓抢占,就是允许调度器终止那些占用资源超过其公平共享份额的队列的容器,这些容器资源释放后可以分配给资源数量低于应得份额的队列的容器。

抢占资源会降低整个集群的效率,因为被终止的containers需要重新执行。

3.4 延迟调度

在一个繁忙的集群上,如果一个应用请求某个节点,那么极有可能此时有其他容器在该节点上允许。显而易见的处理,立刻放宽本地性需求,在同一机架上分配一个容器。实践证明,此时,如果多等待一小段时间,能增加在所请求的节点上分配到一个容器的机会,从而可以提高集群的效率。这个特性称之为延迟调度。

容量调度器和公平调度器都支持延迟调度。

3.5 主导资源公平性

Dominant Resource Fairness,DRF

对于单一类型的资源,容量或公平性的概念很容易确定。当有多种资源类型进行调度时,观察每个用户的主导资源,并将其作为对集群资源使用的一个度量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值