CH4 Fair Schedule

目的

文档主要描述了FairScheduler,一个可拔插的调度去,允许YARN应用公平共享集群上的资源。

概述

公平调度是分配资源的一种方式,公平的,平均的给所有应用分配资源。下一代Hadoop,可以调度多种资源类型,默认公平调度是在内存上的。也可以配置调度cpu和内存。当只有一个app运行的时候app会使用整个集群的资源。当其他app提交,资源会被释放分配给新的app。所以每个app本质上是粗略的平均分配了资源。公平风险也可以有app优先级,优先级决定了每个app获取资源的比重。
调度器把app放入队列,队列之间功能的分享资源,默认所有的app都会被提交到default的队列。如果app的容器特别列出队列,请求会被提交到这个队列。也可以根据用户名指定队列,可以使用配置实现。在队列中,调度策略用来在运行的app之间分配资源。默认是基于内存公平的。FIFO和多类型资源也可以通过配置Dominant Resource Fairness实现。队列可以是分成的来分割资源并且配置权重来共享资源。
另外,公平调度器可以配置最低共享资源。用来保证必要的资源。当队列包含app,就会分配最小共享资源。但是当队列不需要完全保证共享,那么多余的部分会被分配到其他app。特别是队列没有app时,可以用来提高资源的利用率。
默认所有的app在default中运行。但是可以限制运行app数量

可拔插策略的分层队列

公平调度器支持分层队列。所有的队列都是root队列的子队列。可用资源以公平的方式分配给下面的子队列。子队列也以一样公平的方式分配给他们的子队列。app只能被提交在叶队列。app以队列的子元素的方式配置在队列下面。
队列以父队列名字开头,如root.parent1.queue2
每个队列都可以自己的公平调度策略。

自动提交应用到队列

公平调度器允许管理员配置自动提交到队列。可以根据用户,组,策略是由一条条的规则组成,如果满足就分配到这个队列中,如果不满足就下一条规则。

安装

公平调度器在yarn-site.xml中设置

<property>
  <name>yarn.resourcemanager.scheduler.class</name>
  <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
配置

公平调度器通常需要修改2个文件。1.调度器的配置在yarn-site.xml 2.用户会创建一个分配文件列出了队列,权重和容量。分配文件每10秒会重新加载一次。

Yarn-site.xml的属性
属性
yarn.scheduler.fair.allocation.file 分配文件路径,默认是fair-scheduler.xml
yarn.scheduler.fair.user-as-default-queue 用户是否被放入默认队列,false不设置,所有的job都有一个共享队列default,默认为true。如果队列有策略配置会忽略
yarn.scheduler.fair.preemption 是否使用抢占式,默认false
yarn.scheduler.fair.preemption.cluster-utilization-threshold 开启抢占式的资源利用率阈值
yarn.scheduler.fair.sizebasedweight 是否根据app大小开分配
yarn.scheduler.fair.assignmultiple 是否允许多个容器被分配在一个心跳中
yarn.scheduler.fair.dynamic.max.assign 如果上面为true,是否允许动态的在一个心跳上分配资源
yarn.scheduler.fair.max.assign 如果assignmultiple为true,dynamic.max.assign为false最大的容器可以配分配在一个心跳中
yarn.scheduler.fair.locality.threshold.node 对于app调度机会超过阈值被分配到其他node
yarn.scheduler.fair.locality.threshold.rack 调度超过阈值被分配到其他rack
yarn.scheduler.fair.allow-undeclared-pools 新队列可以在应用提交的时候创建,或者通过应用提交者提交或者通过用户定义队列属性指定
yarn.scheduler.fair.update-interval-ms 锁定调度器并重新计算公平共享的时间间隔
yarn.resource-types.memory-mb.increment-allocation 内存的增加值
yarn.resource-types.vcores.increment-allocation core增加值
yarn.resource-types..increment-allocation 增加值
yarn.scheduler.increment-allocation-mb 内存分配的增加值
yarn.scheduler.increment-allocation-vcores core分配的增加值
分配文件格式

分配文件是xml格式的,有5个主要的元素

  1. Queue元素:表示队列。队列元素可以获取可选的类型,如果为parent则为父队列。可以指定父队列,不需要配置页队列。每个队列元素可以包含以下元素:
    1. minResources:最小资源
    2. maxResources: 最大资源
    3. maxContainerAllocation:队列中单个容器最大的资源
    4. maxChildResources:子队列的最大资源
    5. maxRunningApps:每个队列一次性可运行的app数
    6. maxAMShare:允许运行application masters的资源限制。
    7. weight:权重
    8. schedulingPolicy:设置调度策略
    9. aclSubmitApps:可以在这个队列提交的用户和组列表
    10. aclAdministerApps:可以管理队列的用户和组列表
    11. minSharePreemptionTimeout:在最小共享之前几秒开始抢占其他队列的资源
    12. fairSharePreemptionTimeout:在公平共享的阈值之前几秒进入抢占模式。
    13. fairSharePreemptionThreshold:公平共享抢占阈值。
    14. allowPreemptionFrom:决定调度器是否允许从队列抢占资源。
    15. reservation:指定ReservationSystem,队列资源允许用户保留
  2. User元素:对于每个用户的管理。
  3. A userMaxAppsDefault element:userMaxApps的默认值。
  4. A defaultFairSharePreemptionTimeout element
  5. A defaultMinSharePreemptionTimeout element
  6. A defaultFairSharePreemptionThreshold element
  7. A queueMaxAppsDefault element
  8. A queueMaxResourcesDefault element
  9. A queueMaxAMShareDefault element
  10. A defaultQueueSchedulingPolicy element
  11. A reservation-agent element:ReservationAgent的类名默认为:org.apache.hadoop.yarn.server.resourcemanager.reservation.planning.AlignedPlannerWithGreedy.
  12. A reservation-policy element:SharingPolicy类名
  13. A reservation-planner element:Planner的类名
  14. A queuePlacementPolicy element:队列放置策略
队列访问控制列表

队列的管理控制谁能在特定的队列操作。

保留访问控制列表

保留控制权限列表允许管理员控制谁能保留。

配置ReservationSystem

公平调度器支持ReservationSystem允许用户预先保留。可通过reservationid保留资源。

属性
yarn.resourcemanager.reservation-system.enable 启动ReservationSystem
yarn.resourcemanager.reservation-system.class ReservationSystem类名
yarn.resourcemanager.reservation-system.plan.follower PlanFollower类名,在定时器上运行
FairSchedulerPlanFollower.yarn.resourcemanager.reservation-system.planfollower.time-step 定时器的时间
管理

公平调度器支持在运行是修改配置

运行时修改配置

通过修改配置文件可以修改,然后调度器10-15秒会重新加载

通过WebUI监控

http://ResourceManager URL/cluster/scheduler.访问

在队列之间移动app

公平调度器支持在队列之间移动app。移动之后已分配的资源会被计算到新的队列中。如果超过最大并发app个数就会失败

dump Fair Scheduler状态

公平调度器可以定时dump。默认是关闭的。管理员可以修改启动,把.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler设置为DEBUG
公平调度器日志被记录在Resources Manager日志文件中。

原文地址:https://www.cnblogs.com/Amaranthus/p/14943653.html