【Hadoop】YARN容量调度器详解

🦄 个人主页——🎐开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 🎐✨🍁

🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁🍁🪁🍁🪁 🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁

目录

一、CapacityScheduler简介

二、CapacityScheduler特性

三、CapacityScheduler配置

四、YARN WEB UI 参数详解


一、CapacityScheduler简介


Hadoop YARN的核心组件是ResourceManager,负责集群资源管理与调度,而ResourceManager组件的核心是调度器,负责统筹集群资源,满足应用的资源需求。调度器不仅需要优化整个集群的资源布局,避免热点等问题对应用的影响,最大程度利用集群资源;还要能协调好大量应用在集群的运行,基于多租户(队列)公平性、应用优先级等策略解决好资源竞争等问题;也要能满足个别应用在节点依赖、放置策略等方面的特殊需求。

YARN调度器是可拔插的插件,主要有FIFOScheduler、FairScheduler和CapacityScheduler三类。

  • FIFOScheduler:是最简单的调度器,不支持多租户(所有应用都提交到Default队列),不考虑集群的资源分布(节点上堆叠调度),只支持以FIFO(First In,First Out)策略依次调度应用,无其他控制与调度特性。只适用于及其简单的场景,因此很少应用于正式生产。
  • FairScheduler:是CDH(Cloudera Distributed Hadoop)的默认调度器,与HDP(Hortonworks Data Platform)合并后的CDP(Cloudera Data Platform)不再使用(迁移到CapacityScheduler),Apache Hadoop社区也建议迁移到CapacityScheduler。FairScheduler支持较为完善的多租户管理与资源调度能力,包括多级队列、配额管理、ACL控制、弹性资源共享、租户间公平性调度策略、租户内应用调度策略、资源预留、抢占、异步调度等,然而在Apache Hadoop社区的发展相比CapacityScheduler仍稍显落后,核心调度未考虑整个集群的资源布局,也不支持Node Labels(分区调度)、Node Attributes(节点打标调度)、Placement Constraints(放置约束)等调度特性。
  • CapacityScheduler:是Apache Hadoop社区、HDP(Hortonworks Data Platform)及合并后CDP(Cloudera Data Platform)的默认调度器,具有最完善的多租户管理与资源调度能力,不仅包含了FairScheduler的全部能力,还能协调好整个集群的资源布局(基于Global Scheduling),减少热点概率,最大程度利用集群资源,还支持Node Labels(分区调度)Node Attributes(节点打标调度)、Placement Constraints(放置约束)等调度特性。

    下面重点对CapacityScheduler进行介绍,其他调度器的使用说明请参考社区文档。


    二、CapacityScheduler特性


    • 分层队列——支持分层队列,以确保在允许其他队列使用空闲资源之前,在组织的子队列之间共享资源,从而提供更多的控制和可预测性。
      • 容量保证——队列被分配了网格容量的一小部分,在某种意义上,一定容量的资源将供它们使用。提交到队列的所有应用程序都可以访问分配给队列的容量。管理员可以对分配给每个队列的容量配置软限制和可选的硬限制,就是可以使用其他队列的剩余资源,也可以严格限制不能超出限制。
      • 安全性——每个队列都有严格的acl,它控制哪些用户可以向各个队列提交应用程序。此外,还有安全防护措施,以确保用户不能查看和/或修改来自其他用户的应用程序。此外,还支持每个队列和系统管理员角色。
      • 弹性资源共享——可以将空闲资源分配给超出其容量的任何队列。当队列配置资源有空闲时,可以分配给其他有资源需求的队列。当再次需要这些资源时可以抢夺回这些资源。这确保了资源以可预测和弹性的方式对队列可用,从而防止集群中人为的资源孤岛,从而有助于利用率。
      • 多租户——提供了一组全面的限制,以防止单个应用程序、用户和队列独占队列或整个集群的资源,以确保集群不会不堪重负。
      • 可操作性
          • 运行时配置——管理员可以在运行时以安全的方式更改队列定义和属性(如容量、acl),以尽量减少对用户的干扰。此外,还为用户和管理员提供了一个控制台,以查看系统中各种队列的当前资源分配情况。管理员可以在运行时添加额外的队列,但不能在运行时删除队列,除非队列已停止并且没有挂起/正在运行的应用程序。
          • 取消应用程序——管理员可以在运行时停止队列,以确保在现有应用程序运行到完成时,没有新的应用程序可以提交。如果队列处于STOPPED状态,则不能将新的应用程序提交给它自己或它的任何子队列。现有的应用程序将继续完成,因此可以正常地耗尽队列。管理员还可以启动已停止的队列。
          • 基于资源的调度——支持资源密集型应用程序,其中应用程序可以选择指定比默认值更高的资源需求,从而容纳具有不同资源需求的应用程序。目前,内存是支持的资源需求。
          • 优先级调度——该功能允许应用程序以不同的优先级提交和调度。整数值越大,优先级越高。目前,应用程序优先级仅支持FIFO排序策略。
          • 绝对资源配置——管理员可以为队列指定绝对资源,而不是提供基于百分比的值。这为管理员提供了更好的控制,以便为给定队列配置所需的资源量。

            三、CapacityScheduler配置


            Ambari 2.7.4配置页面

            配置队列层级如下:

            root
            ├── acc
            └── ipva
            ├── bzv2
            └── default

            Ambari-queue-manager配置如下:

            capacity-scheduler.xml 配置文件

                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.acc.acl_administer_queue *    yarn.scheduler.capacity.root.acc.acl_submit_applications *    yarn.scheduler.capacity.root.acc.capacity 60    yarn.scheduler.capacity.root.acc.maximum-capacity 70    yarn.scheduler.capacity.root.acc.minimum-user-limit-percent 100    yarn.scheduler.capacity.root.acc.ordering-policy fifo    yarn.scheduler.capacity.root.acc.priority 0    yarn.scheduler.capacity.root.acc.state RUNNING    yarn.scheduler.capacity.root.acc.user-limit-factor 1.5    yarn.scheduler.capacity.root.accessible-node-labels *    yarn.scheduler.capacity.root.acl_administer_queue yarn,spark,hive    yarn.scheduler.capacity.root.acl_submit_applications yarn,ambari-qa       yarn.scheduler.capacity.root.queues acc,bz2,default,ipva  

            关键参数说明:

            yarn.scheduler.capacity.root.acc.capacity:队列资源容量的百分比,用浮点数表示(如12.5)或者是作为绝对资源队列的最小容量。在各层级上所有队列的百分比之和必须等于100。

            yarn.scheduler.capacity.root.acc.maximum-capacity:最大队列容量,以百分比(%)表示为浮点数,或以绝对资源队列最大容量表示。这限制了队列中应用程序的弹性。1)取值范围为0 ~ 100。2)管理员需要确保绝对最大容量>=每个队列的绝对容量。此外,将此值设置为-1将最大容量设置为100%。

            yarn.scheduler.capacity.root.acc.user-limit-factor: 这个参数配置为允许单个用户最多能获取的队列资源(即yarn.scheduler.capacity..capacity的值)的倍数,值是一个浮点值。也就是说如果把这个参数设置为大于1时,用户使用的资源可以超过队列资源。如果该值为2.0,则单个用户使用的最多资源量可以是该队列容量的2倍,但无论配置为多大都不能超过队列的最大资源(即yarn.scheduler.capacity..maximum-capacity的值)。默认值为1,确保单个用户无论集群有多空闲,永远不会占用超过队列配置的资源量。


            四、YARN WEB UI 参数详解


            如下图 点击 Scheduler可以看到在 Ambari 页面上配置的层级队列

            如下是acc 队列的使用情况,不用 队列使用不用的颜色显示

            资源说明

            • 总内存资源: 101.25*1024 = 103680M
            • acc队列容量:103680*60% = 62208M
            • acc队列容量最大:103680*70% = 72575M

              显示

              解释

              Queue State: RUNNING

              队列状态 RUNNING

              Used Capacity : 78.2%

              已使用资源占队列配置值的百分比48640/62208=78.2%

              Effective Capacity: memory:62208, vCores:36> (60.0%)

              有效容量,表示队列实际可用的内存和虚拟核心资源

              分别为 62208 MB 和 36 个。

              Effective Max Capacity: 72575, vCores:41> (70.0%)

              有效最大容量,表示队列实际可用的内存和虚拟核心资源分别为 72575 MB 和 41 个。

              Absolute Used Capacity: 46.9%

              已使用绝对容量 48640/103680=46.9%

              Absolute Configured Capacity: 60.0%

              表示队列在整个集群中占据配置容量60%。

              Absolute Configured Max Capacity: 70.0%

              表示队列在整个集群中占据最大配置容量70%。

              Used Resources: <48640, vCores:15>

              acc 队列使用 资源

              Configured Max Application Master Limit: 20.0

              AppMaster 限制使用资源 20%

              Max Application Master Resources:

              表示每个 Application Master 最多可以使用 2560 MB 内存和 1 个虚拟核心资源

              Used Application Master Resources:

              AppMaster 资源使用 1核1G

              Max Application Master Resources Per User:

              表示每个用户的 Application Master 最多可以使用 14848MB 内存和 1 个虚拟核心资源。

              Num Schedulable Applications: 1

              调度的App调用个数为 1

              Num Non-Schedulable Applications: 0

              没有被调度的app应用个数

              Num Containers: 3

              容器运行 个数3

              Max Applications: 6000

              最大应用数量 6000

              Max Applications Per User: 6000

              每个user最多可以运行的应用数量 6000

              Configured Minimum User Limit Percent: 100%

              每个user最多可以使用队列资源的百分比

              Configured User Limit Factor: 1.5

              最多能获取的队列资源的1.5倍

              Accessible Node Labels: *

              标签策略 为匹配所有

              Ordering Policy: FifoOrderingPolicy

              队列内部任务采用策略Fifo

              参考文章:


              什么是YARN调度器_开源大数据平台E-MapReduce-阿里云帮助中心

              【深入浅出 Yarn 架构与实现】 Yarn 三种调度器_yarn调度器-CSDN博客

              yarn web ui 参数详解 - gentleman_hai - 博客园