YRAN提供了三种调度策略

一、FIFO-先进先出调度器

    YRAN默认情况下使用的是该调度器,即所有的应用程序都是按照提交的顺序来执行的,这些应用程序都放在一个队列中,只有在前面的一个任务执行完成之后,才可以执行后面的任务,依次执行

    缺点:如果有某个任务执行时间较长的话,后面的任务都要处于等待状态,这样的话会造成资源的使用率不高;如果是多人共享集群资源的话,缺点更是明显

二、capacity-scheduler-容量调度器

    针对多用户的调度,容量调度器采用的方法稍有不同。集群由很多的队列组成(类似于任务池),这些队列可能是层次结构的(因此,一个队列可能是另一个队列的子队列),每个队列被分配有一定的容量。这一点于公平调度器类似,只不过在每个队列的内部,作业根据FIFO的方式(考虑优先级)调度。本质上,容量调度器允许用户或组织(使用队列自行定义)为每个用户或组织模拟出一个使用FIFO调度策略的独立MapReduce集群。相比之下,公平调度器(实际上也支持作业池内的FIFO调度,使其类似于容量调度器)强制池内公平共享,使运行的作业共享池内的资源。

    总结:容量调度器具有以下几个特点

    1、集群按照队列为单位划分资源,这些队列可能是层次结构的

    2、可以控制每个队列的最低保障资源和最高使用限制,最高使用限制是为了防止该队列占用过多的空闲资源导致其他的队列资源紧张

    3、可以针对用户设置每个用户的资源最高使用限制,防止该用户滥用资源

    4、在每个队列内部的作业调度是按照FIFO的方式调度的

    5、如果某个队列的资源使用紧张,但是另一个队列的资源比较空闲,此时可以将空闲的资源暂时借用,但是一旦被借用资源的队列有新的任务提交之后,此时被借用出去的资源将会被释放还回给原队列

    6、每一个队列都有严格的访问控制,只有那些被授权了的用户才可以查看任务的运行状态。

   配置文件的说明(capacity-scheduler.xml):

<configuration>

  <property>
   <!--集群中允许运行和排队的最大的应用程序数量,如果如果提交的任务超过这个数量的话,那么多余的任务将不会被MR接受-->
<name>yarn.scheduler.capacity.maximum-applications</name>
<value>10000</value>
<description>
Maximum number of applications that can be pending and running.
</description>
</property>

<!--集群中允许运行ApplicationMater的资源百分比,控制并发运行应用程序的数量-->
<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>0.1</value>
<description>
Maximum percent of resources in the cluster which can be used to run
application masters i.e. controls number of concurrent running
applications.
</description>
</property>

 <!--将用于比较调度程序中的资源的ResourceCalculator实现,默认是在只使用内存的时候进行资源比较-->
<property>
<name>yarn.scheduler.capacity.resource-calculator</name>
<value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value>
<description>
The ResourceCalculator implementation to be used to compare
Resources in the scheduler.
The default i.e. DefaultResourceCalculator only uses Memory while
DominantResourceCalculator uses dominant-resource to compare
multi-dimensional resources such as Memory, CPU etc.
</description>
</property>

 <!--指定root下的所有的队列,用逗号进行分割-->
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>default</value>
<description>
The queues at the this level (root is the root queue).
</description>
</property>
  
 <!--指定default下的所有队列,依次类推-->
<property>
   <name>yarn.scheduler.capacity.root.user1.queues</name>
   <value>usera,userb,userc</value>
 </property>

<!--指定默认default用户使用的资源百分比,因为这里root下只有default一个用户,所以使用了全部的资源-->
<property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<value>100</value>
<description>Default queue target capacity.</description>
</property>

 <!--限制default下的具体的每个用户可以使用的最多的资源百分比,用小数表示,1说明是百分百-->
<property>
<name>yarn.scheduler.capacity.root.default.user-limit-factor</name>
<value>1</value>
<description>
Default queue user limit a percentage from 0.0 to 1.0.
</description>
</property>

 <!--限制default用户最多可以得到集群总资源的百分比,这里只有一个用户,所以为百分百-->
<property>
<name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
<value>100</value>
<description>
The maximum capacity of the default queue.
</description>
</property>

 <!--队列状态:如果一个队列的状态是STOPPED,则不能向其提交应用程序或子队列提交应用程序-->
<property>
<name>yarn.scheduler.capacity.root.default.state</name>
<value>RUNNING</value>
<description>
The state of the default queue. State can be one of RUNNING or STOPPED.
</description>
</property>

<!--限定那些用户或者是用户组可以给给定的队列提交应用程序-->
<property>
<name>yarn.scheduler.capacity.root.default.acl_submit_applications</name>
   <value>*</value>
<description>
    The ACL of who can submit jobs to the default queue.
</description>
</property> <property>
<name>yarn.scheduler.capacity.root.default.acl_administer_queue</name>
<value>*</value>
<description>
The ACL of who can administer jobs on the default queue.
</description>
</property> <property>
<name>yarn.scheduler.capacity.node-locality-delay</name>
<value>40</value>
<description>
Number of missed scheduling opportunities after which the CapacityScheduler
attempts to schedule rack-local containers.
Typically this should be set to number of nodes in the cluster, By default is setting
approximately number of nodes in one rack which is 40.
</description>
</property> </configuration>

三、Fair-scheduler-公平调度器

    所谓的公平调度器指的是,旨在让每个用户公平的共享集群的能力。如果是只有一个作业在运行的话,就会得到集群中所有的资源。随着提交的作业越来越多,限制的任务槽会以“让每个用户公平共享集群”这种方式进行分配。某个用户的好事短的作业将在合理的时间内完成,即便另一个用户的长时间作业正在运行而且还在运行过程中。

    作业都是放在作业池中的,默认情况下,每个用户都有自己的作业池。提交作业数较多的用户,不会因此而获得更多的集群资源。可以用map和reduce的任务槽数来定制作业池的最小容量,也可以设置每个池的权重。

    公平调度器支持抢占机制。所以,如果一个池在特定的一段时间内未能公平的共享资源,就会终止运行池中得到过多的资源的任务,把空出来的任务槽让给运行资源不足的作业池。

    主要特点:

      1、也是将集群的资源以队列为单位进行划分,称为队列池

      2、每个用户都有自己的队列池,如果该队列池中只有一个任务的话,则该任务会使用该池中的所有资源

      3、每个用户提交作业都是提交到自己的队列池中,所以,提交作业数较多的用户,并不会因此而获得更多的集群资源

      4、支持抢占机制。也就是说如果一个吃在特定的时间内未能公平的共享资源,就会终止池中占用过多资源的任务,将空出来的任务槽让给运行资源不足的作业池。

      5、负载均衡:提供一个基于任务数目的负载均衡机制。该机制尽可能的将任务均匀的分配到集群的所有的节点上。

YARN的三种调度器的使用的更多相关文章

  1. 第1节 yarn:14、yarn集群当中的三种调度器

    yarn当中的调度器介绍: 第一种调度器:FIFO Scheduler  (队列调度器) 把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源 ...

  2. Hadoop的三种调度器FIFO、Capacity Scheduler、Fair Scheduler(转载)

    目前Hadoop有三种比较流行的资源调度器:FIFO .Capacity Scheduler.Fair Scheduler.目前Hadoop2.7默认使用的是Capacity Scheduler容量调 ...

  3. Yarn 组件的指挥部 – 调度器Scheduler

    linux基础 为hadoop集群的搭建扫清了障碍,也为内存的管理,文件系统的管理扫清了障碍 接着到Hadoop的阶段,首先做集群的安装,深入到使用这两个核心的组件,分布式文件系统HDFS,解决大量数 ...

  4. Spring Boot实践——三种拦截器的创建

    引用:https://blog.csdn.net/hongxingxiaonan/article/details/48090075 Spring中的拦截器 在web开发中,拦截器是经常用到的功能.它可 ...

  5. jvm三的三种类加载器

    JVM有三种类加载器:bootstrap负责加载系统类,extclassloader负责加载扩展类,appclassloader负责加载应用类.他们主要是分工不一样,各自负责不同的区域,另外也是为了实 ...

  6. JVM核心机制(类加载器、三种类加载器、代理加载模式、双亲委派机制

  7. yarn的调度器

    三种调度器 1.FIFO Scheduler 把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,等最前面的应用需求满足后再给下一个分配,以 ...

  8. Hadoop YARN 调度器(scheduler) —— 资源调度策略

    本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/hadoop_yarn_resource_scheduler 搜了 ...

  9. 大数据之Yarn——Capacity调度器概念以及配置

    试想一下,你现在所在的公司有一个hadoop的集群.但是A项目组经常做一些定时的BI报表,B项目组则经常使用一些软件做一些临时需求.那么他们肯定会遇到同时提交任务的场景,这个时候到底如何分配资源满足这 ...

随机推荐

  1. NetCore持续踩坑

    坑1: vs2017 安装 .netcore2.2.2后,新建项目编译报错:.NET SDK 不支持降.NET Core2.2 设置为目标. 我以为是.netcore的sdk版本有误,于是我查看.ne ...

  2. 【转】数据处理常用的sql语句整理

    一下语句都是基于 mysql数据库 查询是否使用索引 explain  select * FROM t_table1; 结果列的含义: table:此次查询操作是关联哪张数据表 type:连接查询操作 ...

  3. To My Girlfriend (DP)

    题意:求选中若干个数,满足和为S,且不能选中下表i, j 和选中k, l的情况总数量. 思路:DP[i][j][k][l] i:前i个和为j,选中k个和不选中l个的情况数量,那么我们的转换应该是在必选 ...

  4. Gradle's dependency cache may be corrupt

    原因分析: 当前Android studio 安装或者升级后配置的Gradle版本不对.可以打开安装目录下\Android\Android Studio\gradle\查看当前已有最新的版本.例如下图 ...

  5. IP通信基础学习第九周

    H3C单臂路由: 交换机的所有接口是在同一个广播域 用vlan进行隔离广播域 创建vlan,display可查看是否创建成功 进入接口是Interface,配置接口Port 先测试相同的vlan ,可 ...

  6. Eureka服务端源码流程梳理

    一.简述 spring cloud三步走,一导包,二依赖,三配置为我们简化了太多东西,以至于很多东西知其然不知其所以然,了解底层实现之后对于一些问题我们也可以快速的定位问题所在. spring clo ...

  7. python list用法

    a = ['张三','李四','赵六','王五'] #打印列表 print(a) #增 a.apppend('徐七') print(a) a.insert(1,'张六') print(a) #删 a. ...

  8. 【Alpha】Scrum Meeting 9

    目录 前言 任务分配 燃尽图 会议照片 签入记录 困难 前言 第9次会议于4月13日20:00在一公寓3楼召开. 交流确认了任务进度,对下一阶段任务进行分配.时长20min. 任务分配 姓名 当前阶段 ...

  9. freeswitch 事件命令

    1.uuid_bridge 桥接两条呼叫的腿. Usage: uuid_bridge <uuid> <other_uuid> uuid_bridge至少需要有一条腿是被呼通的. ...

  10. Kali Linux Xfce版美化虚拟机镜像

    起因 这两天来学校把硬盘基本全部清空了,所以以前的虚拟机就需要重新安装了. Kali 一直用的是 xfce 版本,至于为什么用这个版本,是因为我感觉 gnome3 在虚拟机上表现欠佳.当然,默认的 g ...