yarn fair调度器配置及说明

1.fair与Capacity区别

我们熟知yarn的调度器目前有Capacity Scheduler跟Fair Scheduler调度器。fair Scheduler跟Capacity Scheduler在以队列为单位划分资源,每个队列可设定一定比例的资源最大最小值及用户资源限定方面是相同的,fair主要在以下方面比Capacity 具有优势:

     1.资源公平共享。在每个队列中,fair可选择按照FIFO、Fair或 DRF策略为应用程序分配资源。

     2.支持资源抢占。当某个队列有剩余资源时,调度器会将这些资源共享给其他队列,而当该队列中有新的应用程序提交时,调度器要为它回收资源。为了尽可能降低不必要的计算浪费,调度器采用了先等待再强制回收的策略,即如果等待一段时间后尚有未归还的资源,则会进行资源抢占。

   3.负载均衡。fair 提供了一个基于任务数目的负载均衡机制,该机制尽可能将系统中的任务均匀分配到各个节点上。此外,用户也可以根据自己需求设计负载均衡机制。

   4.调度策略配置灵活。fair允许管理员为每个队列单独设置调度策略(当前支持fifo,fair,DRF三种)。

  5.提高小应用程序响应时间。由于采用了最大最小公平算法,小作业可以快速获取资源并运行完成。

2.Fair Scheduler配置使用

     Fair Scheduler的配置选项包括两部分:其中一部分在yarn-site.xml中,主要用于配置调度器级别的参数;另外一部分在一个自定义配置文件(默认是fair-scheduler.xml)中,主要用于配置各个队列的资源量,权重等信息。配置yarn-site.xml如下:

<configuration>
 <property>
    <!--配置启用fair调度器-->
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
 </property>
 <property>
      <!--设置自定义配置文件位置-->
     <name>yarn.scheduler.fair.allocation.file</name>
         <value></value>
  </property>
   <property>
          <!--当应用程序未指定队列名时,是否指定用户名作为应用程序所在的队列名,默认为true-->
       <name>yarn.scheduler.fair.user-as-default-queue</name>
       <value>false</value>
   </property>

   <property>
         <!--是否启用抢占机制,默认是false-->
       <name>yarn.scheduler.fair.preemption</name>
       <value>true</value>
   </property>
   <property>
         <!--在一个队列内部分配资源时,默认情况下,采用公平轮询的方法将资源分配给各个应用程序,而该参数提供了另外一种资源分配方式,则按照应用程序资源需求数目分配资源,需求资源数量越多,分配的资源越多。默认为false-->
       <name>yarn.scheduler.fair.sizebasedweight</name>
       <value>false</value>
   </property>
    <property>
        <!--是否启动批量分配功能。当一个结点有大量资源时,可以一次分配完成,也可以多次分配完成。默认为false-->
       <name>yarn.scheduler.assignmultiple</name>
       <value>true</value>
    </property>
    <property>
         <!--如果开启了批量分配功能,可指定一次分配的Container数目。默认值为-1,表示不限制-->
         <name>yarn.scheduler.fair.max.assign</name>
         <value>10</value>
    </property>
     <property>
            <!--当应用程序请求某个结点上资源时,它可以接受的可跳过的最大资源调度机会。当按照分配策略可将一个节点上的资源分配给某个应用程序时,如果该节点不是应用程序期望的节点,可选择跳过该分配机会暂时将资源分配给其他应用程序,直到满足该应用程序需求的节点资源出现。通常而言,一次心跳代表一次调度机会,而该参数则表示跳过调度机会占节点总数的比例,默认为-1,表示不跳过任何调度机会-->
           <name>yarn.scheduler.fair.locality.threshold.node</name>
           <value>-1</value>
     </property>
      <property>
           <!--当应用程序请求某个机架上资源时,它可以接受的可跳过的最大资源调度机会-->
          <name>yarn.scheduler.fair.locality.threshold.rack</name>
          <value>-1</value>
     </property>
     <property>
           <!--内存归整化单位,默认是1024,这意味着,如果一个Container请求资源是1.5G,则将调度器规整为2G-->
          <name>yarn.scheduler.increment-allocation-mb</name>
          <value>1024</value>
     </property>
     <property>
           <!--虚拟cpu规整化单位,默认是1,含义同上-->
          <name>yarn.scheduler.increment-allocation-vcores</name>
          <value>1</value>
     </property>
</configuration>

自定义配置文件配置及说明如下:

<allocations>
  <defaultQueueSchedulingPolicy>fair</defaultQueueSchedulingPolicy>
  <queue name="prod">
    <!--最少资源保证量,当一个队列的最少资源保证量未满足时,它将优先于其他同级队列获取资源。对于不同的调度策略,最少资源保证含义不同,对于Fair策略,只考虑内存资源;对于DRF策略,则考虑主资源使用的资源量,即如果一个队列的主资源量超过它的最少资源量,则认为它已得到满足-->
    <minResources>100mb,1vcores</minResources>
<!--最多可以使用的资源量,Fair scheduler会保证每个队列使用的资源量不会超过该队列的最多可使用资源量-->
    <maxResources>150mb,50vcores</maxResources>
     <!--最多同时运行的应用程序数目。通过该限制,可以避免多个应用程序同时运行占用过多临时资源。比如可防止多个Map Task同时运行时产生的中间输出结果“撑爆”磁盘-->
    <maxRunningApps>200</maxRunningApps>
     <!--最小共享量抢占时间,如果一个资源池在该时间内使用的资源量一直低于最小资源量,则开始抢占资源-->
    <minsharePremmptionTimout>300</minSharePreemptionTimeout>
    <weight>40</weight>
    <!--队列采用的调度模式,可以是FIFO、Fair或者DRF-->    
    <schedulingPolicy>fifo</schedulingPolicy>
    <!--可向队列中提交应用程序的用户列表,默认情况为*,即任何用户都可以向该队列提交应用程序。需要注意的是,该属性具有继承性,即子队列的列表会继承父队列的列表-->
    <aclSubmitApps>*</aclSubmitApps>
    <!--队列的管理员列表。一个队列的管理员可管理队列中的资源和应用程序,比如可杀死队列中任意应用程序-->
    <aclAdministerApps>*</aclAdministerApps>
  </queue>
  <queue name="dev">
          <minResources>300mb,3vcores</minResources>
          <maxResources>150mb,70vcores</maxResources>
      <weight>60</weight>
      <queue name="eng">
       <minResources>50mb,1vcores</minResources>
       <maxResources>150mb,30vcores</maxResources></queue>
      <queue name="science"/>
  </queue>
  <queuePlacementPolicy>
        <rule name="spcified" create="false" />
        <rule name="primaryGroup" create="false" />
        <rule name="default" queue="dev.eng" />
  </queuePlacementPolicy>
  <user name="hadoop">
       <!--最多同时运行的应用程序数目。通过该限制,可以避免多个应用程序同时运行占用过多临时资源。比如可防止多个Map Task同时运行时产生的中间输出结果“撑爆”磁盘-->
    <maxRunningApps>400</maxRunningApps>
  <user>
  <userMaxAppsDefault>40</userMaxAppsDefault>
  <fairSharePreemptionTimeout>6000</fairSharePreemptionTimeout>
</allocations>

3.Capacity Scheduler与Fair Scheduler对比

猜你喜欢

转载自blog.csdn.net/sujins5288/article/details/87804433
今日推荐