yarn资源配置及使用

目录

1.简介

2.调度器

1.FIFO Scheduler

2.Capacity Scheduler

1.介绍

2.capacity调度器的特性

4.配置demo

3.Fair Scheduler

4.yarn调度器对比


1.简介

理想情况下,应用提交到yarn上立马就可以获得资源执行任务,但是现实情况资源往往是有限的,任务执行的先后及获得资源的多少,yarn给我们提供了多种调度器和配置策略供我们选择。默认的ui地址:http://ip:8088

2.调度器

yarn有三种调度器可以选择

  • FIFO Scheduler
  • Capacity Scheduler
  • Fair Scheduler

1.FIFO Scheduler

先进先出队列,先满足前面的任务,有多余的资源再满足下面的任务。

不适合共享集群,因为大任务可能占用全部的集群资源,导致其他任务阻塞

2.Capacity Scheduler

1.介绍

适合多个组织共享整个集群,每个组织分配专门的队列,然后每个队列分配一定的资源。

资源按百分比进行分配成多个队列,且队列资源可以设置弹性,在队列资源不够的时候可以使用其他队列资源,其他队列有任务的时候会在本队列任务执行完成释放资源还给其他队列。在队列内部,资源调度采用先进先出(FIFO)策略。

例如:下面A占总资源60%,B占总资源的40%,a1占A资源的40%,a2占A资源的60%,虽然有了这样的资源分配,但是并不是说A只能占60%的资源,因为资源可以设置弹性,如果A设置了最大资源是80%,那么A最多可以使用集群资源的80%。

root
------A[60%]
      |---A.a1[40%]
      |---A.a2[60%]
------B[40%]

2.capacity调度器的特性

层次化队列设计,子队列可以使用父队列的全部资源,更容易合理分配和限制资源的使用。

容量保证,每个队列可以设置一定的资源,但是又不会占有全部资源

弹性分配,空闲的资源可以分配给其他任何队列

操作性,yarn支持动态调整容量,在运行时可以增加队列,但不能删除队列,可以在运行时暂停队列,这样保证当前队列在执行过程中,集群不会接受其他任务

3.配置

yarn.scheduler.capacity.default.minimum-user-limit-percent=100 
yarn.scheduler.capacity.maximum-am-resource-percent=0.2 AM最多可使用的资源比例,目的是限制过多的app数量,默认值0.2
yarn.scheduler.capacity.maximum-applications=10000 同时等待和运行的最大任务数
yarn.scheduler.capacity.node-locality-delay=40 调度器在放松节点限制、改为匹配同一机架上的其他节点前尝试错过的调度机会数
yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator 资源计算模式,默认使用DefaultResourceCalculator,还有一种是DominantResourceCalculator
yarn.scheduler.capacity.root.accessible-node-labels=*
yarn.scheduler.capacity.root.acl_administer_queue=*   哪些用户或用户组可以管理队列
yarn.scheduler.capacity.root.acl_submit_applications=* 哪些用户或用户组可以提交任务
yarn.scheduler.capacity.root.capacity=100 占用集群百分之多少比例的资源
yarn.scheduler.capacity.root.default.acl_administer_jobs=*
yarn.scheduler.capacity.root.default.acl_submit_applications=*
yarn.scheduler.capacity.root.default.capacity=100 占用root百分之多少比例的资源
yarn.scheduler.capacity.root.default.maximum-capacity=100 弹性设置,最大时占用多少比例资源
yarn.scheduler.capacity.root.default.state=RUNNING 队列状态,可以是RUNNING或STOPPED
yarn.scheduler.capacity.root.default.user-limit-factor=1 可以配置为允许单个用户获取更对资源的队列容量的倍数,值为浮点数,默认为1表示无论集群有多空闲,单个用户都不能占用超过队列配置的容量
yarn.scheduler.capacity.root.queues=default root包含哪些队列,这里只包含default队列,逗号分隔
yarn.scheduler.capacity.schedule-asynchronously.enable=true 是否开启异步调度
yarn.scheduler.capacity.schedule-asynchronously.maximum-threads=1 开启异步调度最大线程数
yarn.scheduler.capacity.schedule-asynchronously.scheduling-interval-ms=10 异步调度间隔

yarn.scheduler.capacity.root.default.default-application-priority=0 设置default队列默认优先级为0,优先级只在FIFO队列中有效
yarn.cluster.max-application-priority 全局最大优先级 设置的优先级超过这个值则使用该值作为任务的优先级

4.配置demo

分为3个队列default,A,B,资源各占50,40,10

yarn.scheduler.capacity.default.minimum-user-limit-percent=100
yarn.scheduler.capacity.maximum-am-resource-percent=0.2
yarn.scheduler.capacity.maximum-applications=10000
yarn.scheduler.capacity.node-locality-delay=40
yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator
yarn.scheduler.capacity.root.accessible-node-labels=*
yarn.scheduler.capacity.root.acl_administer_queue=*
yarn.scheduler.capacity.root.acl_submit_applications=*
yarn.scheduler.capacity.root.capacity=100
yarn.scheduler.capacity.root.default.acl_administer_jobs=*
yarn.scheduler.capacity.root.default.acl_submit_applications=*
yarn.scheduler.capacity.root.default.capacity=50
yarn.scheduler.capacity.root.default.maximum-capacity=60
yarn.scheduler.capacity.root.default.state=RUNNING
yarn.scheduler.capacity.root.default.user-limit-factor=1
yarn.scheduler.capacity.root.queues=default,A,B

yarn.scheduler.capacity.root.A.acl_administer_jobs=*
yarn.scheduler.capacity.root.A.acl_submit_applications=*
yarn.scheduler.capacity.root.A.capacity=40
yarn.scheduler.capacity.root.A.maximum-capacity=50
yarn.scheduler.capacity.root.A.state=RUNNING
yarn.scheduler.capacity.root.A.user-limit-factor=1

yarn.scheduler.capacity.root.B.acl_administer_jobs=*
yarn.scheduler.capacity.root.B.acl_submit_applications=*
yarn.scheduler.capacity.root.B.capacity=10
yarn.scheduler.capacity.root.B.maximum-capacity=20
yarn.scheduler.capacity.root.B.state=RUNNING
yarn.scheduler.capacity.root.B.user-limit-factor=1


yarn.scheduler.capacity.schedule-asynchronously.enable=true
yarn.scheduler.capacity.schedule-asynchronously.maximum-threads=1
yarn.scheduler.capacity.schedule-asynchronously.scheduling-interval-ms=10

3.Fair Scheduler

公平调度,任务平均共享集群资源。

4.yarn调度器对比