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. Java设计模式之动态代理

    关于Proxy: 1,他是所有动态代理的父类: 2,他可以用作创建动态代理类和动态代理对象: 3,JDK中自带的动态代理. 1,首先创建一个接口,方法申明如下: package com.proxy; ...

  2. linux上的图片查看器FEH_image_view

    Linux上的图片查看器, 简单,没有多余功能,打开快速,体积小 在终端用feh # 直接执行feh显示当前目录所有图片 feh # 或者指定图片名 feh pic1 pic2 pic3 # 显示一个 ...

  3. C++ STL stack 用法

    Stack(栈)是一种后进先出的数据结构,也就是LIFO(last in first out) ,最后加入栈的元素将最先被取出来,在栈的同一端进行数据的插入与取出,这一段叫做“栈顶”. 使用STL的s ...

  4. Vue与React的异同

    众所周知,前端现在最火的两个框架是Vue和React了.通过一段时间的学习与项目上的实践,我想通过比较他们之间的异同点来发现以后在项目的技术选型中知道怎么抉择用哪个.有一点说明的是他们各自有自己的优势 ...

  5. 2017-2018-2 20155228 《网络对抗技术》 实验一:PC平台逆向破解

    2017-2018-2 20155228 <网络对抗技术> 实验一:PC平台逆向破解 实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用 ...

  6. Hibernate的工作原理及使用的原因

    一.工作原理: 1.读取并解析配置 2.读取并解析映射信息,创建Session Factory 3.打开Session 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Sess ...

  7. LoadXml 加载XML时,报错:“根级别上的数据无效。 行1,位置1“

    ==XML=================================== <?xml version="1.0" encoding="utf-8" ...

  8. Liunx中fstab文件详解

    Liunx中fstab文件详解 /etc/fstab是用来存放文件系统的静态信息的文件.位于/etc/目录下,可以用命令less /etc/fstab 来查看,如果要修改的话,则用命令 vi /etc ...

  9. vue路由详解

    自己看vue文档,难免有些地方不懂,自己整理一下,主要是vue-router具体实现的操作步骤. 安装 直接下载/CDN https://unpkg.com/vue-router/dist/vue-r ...

  10. jmeter java requst请求

    https://wangym.iteye.com/blog/731729 http://www.cnblogs.com/yangxia-test/p/4019541.html https://blog ...