目的
文档主要描述了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. |
|
yarn.scheduler.increment-allocation-mb | 内存分配的增加值 |
yarn.scheduler.increment-allocation-vcores | core分配的增加值 |
分配文件格式
分配文件是xml格式的,有5个主要的元素
- Queue元素:表示队列。队列元素可以获取可选的类型,如果为parent则为父队列。可以指定父队列,不需要配置页队列。每个队列元素可以包含以下元素:
- minResources:最小资源
- maxResources: 最大资源
- maxContainerAllocation:队列中单个容器最大的资源
- maxChildResources:子队列的最大资源
- maxRunningApps:每个队列一次性可运行的app数
- maxAMShare:允许运行application masters的资源限制。
- weight:权重
- schedulingPolicy:设置调度策略
- aclSubmitApps:可以在这个队列提交的用户和组列表
- aclAdministerApps:可以管理队列的用户和组列表
- minSharePreemptionTimeout:在最小共享之前几秒开始抢占其他队列的资源
- fairSharePreemptionTimeout:在公平共享的阈值之前几秒进入抢占模式。
- fairSharePreemptionThreshold:公平共享抢占阈值。
- allowPreemptionFrom:决定调度器是否允许从队列抢占资源。
- reservation:指定ReservationSystem,队列资源允许用户保留
- User元素:对于每个用户的管理。
- A userMaxAppsDefault element:userMaxApps的默认值。
- A defaultFairSharePreemptionTimeout element
- A defaultMinSharePreemptionTimeout element
- A defaultFairSharePreemptionThreshold element
- A queueMaxAppsDefault element
- A queueMaxResourcesDefault element
- A queueMaxAMShareDefault element
- A defaultQueueSchedulingPolicy element
- A reservation-agent element:ReservationAgent的类名默认为:org.apache.hadoop.yarn.server.resourcemanager.reservation.planning.AlignedPlannerWithGreedy.
- A reservation-policy element:SharingPolicy类名
- A reservation-planner element:Planner的类名
- 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日志文件中。