热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

yarn框架的调度总结

yarn框架的调度总结,Go语言社区,Golang程序员人脉社

可以参考文档http://blog.csdn.net/suifeng3051/article/details/49508261,这篇文章基本是比较详细得翻译了hadoop权威指南第四版的调度部分,下面的文章我主要把注意点总结一下,写的比较精简

一. 调度器的选择

yarn有三种调度器:FIFO Scheduler、Capacity Scheduler、Fair Scheduler
下图演示了三种调度的不同
三种调度方式对比

1.1 FIFO Scheduler

这种调度方式比较简单,不需要额外配置,单个job会占用掉所有资源,这样小任务可能被大任务阻塞一般不推荐使用,多用于其他调度的子队列中

1.2 Capacity Scheduler

针对不同的应用分配不同量的资源,可以保证小任务可以立即执行得到反馈,但和Fair Scheduler相比不能百分百发挥集群性能。在默认情况下使用Capacity Scheduler,但如果不给Capacity Scheduler配置对应的队列,其实和使用FIFO Scheduler是等价的。

1.3 Fair Scheduler

可以百分百发挥集群性能,并设置应用使用集群的比重,不过对于后面起来的任务有一定的滞后行,因为要等待之前的任务释放资源。

二. Capacity Scheduler

2.1 注意事项

  1. 由多个队列组成,队列可以有自己的子队列
  2. 队列中使用FIFO Scheduler方式调度
  3. 当一个队列中有两个及以上job,就会占用别的队列的空闲资源。可以通过设置队列资源最大比重,防止该队列侵吞过多资源。
  4. 当一个队列被别的队列占用资源后,开始执行一个任务,不会马上kill其他容器,而是等待资源释放。
  5. 应用中需要指定队列名称,否则会全部被塞入default队列(单个队列),也就是相当于在使用FIFO Scheduler,使用mapreduce.job.queue.name参数设置。

2.2配置举例

下面是Capacity Scheduler比较基础的配置,配置文件名称为capacity-scheduler.xml
这里写图片描述

以上位置生成队列层次为

root
├── prod
└── dev
    ├── eng
    └── science
  1. 所有的队列都是root队列的子队列。
  2. 配置文件中可以看到,root队列设置了两个子队列,prod和dev,然后在dev队列下又设置了两个子队列eng和science。
  3. prod队列占用了百分之40的资源,dev队列占用了百分之60的资源。
  4. dev队列设置了最大资源占用量为百分之75,也就是说prod最少情况下也有百分之25的资源可以立即使用。
  5. eng和science平分了dev的资源,也就是说在其中一个队列空闲并且prod队列也空闲的状态下,另一个可以占用集群最大为百分之75的资源。

2.3参数配置

这里写链接内容

三. Fair Scheduler

这里写图片描述

如图所示,Fair Scheduler也是有队列的概念的。队列A中的运行job1,一开始会占用所有集群资源,随后队列B中运行job2,随着计算job1的资源被释放,然后会分配给队列B计算job2,然后队列B中运行job3,队列A并不会释放资源,因为不是本队列中的任务,队列B会逐渐释放资源给job3。所以Fair Scheduler的计算有一定的迟滞行,但对整体效率来说是最优的。

3.1 注意点

  1. Fair Scheduler不是默认调度模式,需要在yarn中配置参数。(设置yarn.resourcemanager.scheduler.class为org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler)
  2. 和Capacity Scheduler一样,所有队列都是root队列的子队列。
  3. 可以设置队列所占权重,默认权重是1。
  4. 可以通过配置文件设置队列的调度方式,有两种可以设置,defauleQueueSchedulingPolicy和schedulingPolicy。defauleQueueSchedulingPolicy设置默认队列调度方式。schedulingPolicy则针对单个队列设置调度方式会覆盖默认属性。
  5. 可以设置队列的最大最小资源,注意设置的最小资源并不是硬性指标,队列资源可以小于最小资源,这种情况下该队列获取资源的优先级就会比较高。一般设置最小资源是用来解决获取资源的优先级问题。
  6. 队列有三种配对原则,后面详细说明

3.2 配置举例

这里写图片描述

根据上图配置可以发现
1. 队列层次和上面Capacity Scheduler的配置例子是一致的
2. defaultQueueSchedulingPolicy设置到了fair就是表示在没有额外配置的情况下,队列使用Fair Scheduler。
3. prod队列配置了schedulingPolicy为fifo表示,只有prod队列使用FIFO Scheduler,其他所有队列使用默认配置的Fair Scheduler。
4. 队列中配置的数字是权重,上面的配置改成prod设置2, dev设置3效果是一样的。默认情况下,权重是1

3.3队列配对策略(queuePalacementPolicy)

根据上图设置的queuePlacemenetPolicy,可以Fair Scheduler更具有灵活性,可以自己定制队列配对原则。
元素定义了一个规则列表,其中的每个规则会被逐个尝试直到匹配成功。

如上面的例子:

<queuePlacementPolicy>
<rule name="specified" create="false" />
<rule name="primaryGroup" create="false" />
<rule name="default" queue="dev.eng" />
queuePlacementPolicy>
  1. 第一行表示使用specified策略,表示将应用放到名称匹配的队列中,如果这个应用没有指定队列名或队列名不存在,则说明不匹配这个规则,然后尝试下一个规则。
  2. 第二行使用primaryGroup,表示尝试把应用放在以用户所在的Unix组名命名的队列中,如果没有这个队列,不创建队列转而尝试下一个规则。
  3. 第三行使用default策略,表示把所有应用放到dev.eng队列中。

当然,我们可以不配置queuePlacementPolicy规则,调度器则默认采用如下规则:

<queuePlacementPolicy>
<rule name="specified" />
<rule name="user" />
queuePlacementPolicy>
  1. 匹配队列名称
  2. 使用user匹配队列,如果不成功以名称创建队列

还有一个简单的配置策略可以使得所有的应用放入同一个队列(default),这样就可以让所有应用之间平等共享集群而不是在用户之间。这个配置的定义如下:

<queuePlacementPolicy>
<rule name="default" />
queuePlacementPolicy>

3.4 抢占(preemption)

在Fair Scheduler中可以通过配置和参数设置抢占功能,就是杀掉别的应用的资源,来给自己使用,以提高应用的优先级。

  1. 通过设置一个全局的参数yarn.scheduler.fair.preemption=true来启用抢占功能。
  2. 有两种超时时间,一种是小于分配权重的超时抢占(fair share preemption timeout),一种是小于最小分配资源的超时抢占(minimum share preemption timeout)。
  3. 为所有队列配置最小超时时间。.元素来为某个队列指定最小超时时间
  4. 和则是分配权重超时。
  5. 上面提到的比例可以通过(配置所有队列)和(配置某个队列)进行配置,默认是0.5。

3.5 参数配置

这里写链接内容

四. 延迟调度(Delay Scheduling)

yarn所有的调度方式都会优先使用与数据距离更近的机器进行计算,这样可以节省网络开销。延迟调度就是在本地资源被使用时,调度中心会等待一会,如果等待时间中本地资源得到释放,就会调用本地资源。反之则使用较远的资源。

什么是调度机会:
每个node manager都会周期性的向调度中心发送节点信息(默认一秒),这些信息中包含了那些容器和资源是可被获得的。调度中心收到一次心跳,如果节点有资源可以被调用,就是一次调度机会。

Capacity Scheduler:
通过参数yarn.scheduler.capacity.node-locality-delay配置。是一个正整数,调度器尝试调度一个同机架不同节点的container之前,最多跳过的调度机会,通常而言,该值被设置成集群中机架数目,默认情况下为-1,表示不启用该功能

Fair Scheduler:
通过配置yarn.scheduler.fair.locality.threshold.node和yarn.scheduler.fair.locality.threshold.rack。
当yarn.scheduler.fair.locality.threshold.node设置为0.5表示,必须要超过集群中一半的节点都提供过调度机会,才会尝试不同节点相同相同机架的其他节点。
yarn.scheduler.fair.locality.threshold.rack同理类推,是不同机架的节点。

五. 判定资源比例(Dominant Resource Fairness)

在以前的框架中,资源单单指的是内存,现在yarn框架可以判断的资源可能包含两种及以上,例如cpu等等,这种情况下要怎么判断应用占用资源的比重。

举个例子:
一个集群有100个cpu和10TB的内存。应用A需要资源(2CPU, 300GB), 应用B需要资源(6CPU,100GB)。
那么A应用所占集群总资源(2%,3%), B应用所占集群总资源(6%, 1%)。
按照现行策略是取应用中占比大的作为其资源占比,那么
A就是要占用资源的3%,而B占用资源6%

在默认情况下Dominant Resource Fairness策略是没有被使用的,只看了内存资源,如果启用需要修改配置
Capacity Scheduler:
yarn.scheduler.capacity.resource-calculator为org.apache.hadoop.yarn.util.resource.DominantResourceCalculator

Fair Scheduler:
设置为drf。


推荐阅读
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 一、Tomcat安装后本身提供了一个server,端口配置默认是8080,对应目录为:..\Tomcat8.0\webapps二、Tomcat8.0配置多个端口,其实也就是给T ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 本文旨在解决 MySQL 无法连接到 localhost 的常见问题,并提供详细的步骤来确保 MySQL 服务正确启动和配置。 ... [详细]
  • 本文详细介绍了如何在Linux系统(以CentOS为例)上彻底卸载Zimbra邮件系统,包括停止服务、删除文件和用户等步骤。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 本文详细介绍了在Linux系统上编译安装MySQL 5.5源码的步骤。首先,通过Yum安装必要的依赖软件包,如GCC、GCC-C++等,确保编译环境的完备。接着,下载并解压MySQL 5.5的源码包,配置编译选项,进行编译和安装。最后,完成安装后,进行基本的配置和启动测试,确保MySQL服务正常运行。 ... [详细]
  • 本文详细介绍了在Windows XP系统中安装和配置Unix打印服务的方法,以支持远程行式打印机(LPR)功能。对于同时使用Windows 2000 Server打印服务器和Unix打印服务器的网络环境,该指南提供了实用的步骤和配置建议,确保不同平台之间的兼容性和高效打印。 ... [详细]
  • 本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
author-avatar
罗伯特1980_823
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有