yarn队列之fair队列。


【Hadoop-Yarn】FIFO、Capacity、Fair三种资源调度器详解_一个写湿的程序猿的博客-CSDN博客Hadoop-Yarn-三种资源调度器详解文章目录Hadoop-Yarn-三种资源调度器详解资源调度器1)先进先出调度器(FIFO)2)容量调度器(Capacity Scheduler)3)公平调度器(Fair Scheduler)资源调度器目前,Hadoop作业调度器主要有三种:FIFO、Capacity Scheduler、Fair Scheduler。Hadoop3.1.3默认的资源调度器是Capacity Scheduler。1)先进先出调度器(FIFO)Hadoop最初设计目的是支持大https://blog.csdn.net/qq_32727095/article/details/107649052Apache Hadoop 3.0.0 – Hadoop: Fair Schedulericon-default.png?t=M3K6https://hadoop.apache.org/docs/r3.0.0/hadoop-yarn/hadoop-yarn-site/FairScheduler.html

集群为cdh6.3.2

{
  "defaultQueueSchedulingPolicy": "fair",
  "queuePlacementRules": [
    {
      "create": false,
      "name": "specified"
    },
    {
      "name": "default",
      "queue": "fdw_queue"
    }
  ],
  "queues": [
    {
      "aclAdministerApps": "*",
      "aclSubmitApps": "*",
      "name": "root",
      "queues": [
        {
          "name": "fdw_queue",
          "queues": [],
          "schedulablePropertiesList": [
            {
              "maxAMShare": 0.8,
              "maxResources": {
                "cpuPercent": 99.8,
                "memoryPercent": 99.8
              },
              "maxRunningApps": 300,
              "scheduleName": "default",
              "weight": 1.0
            }
          ],
          "schedulingPolicy": "drf"
        },
        {
          "name": "realtime_queue",
          "queues": [],
          "schedulablePropertiesList": [
            {
              "maxAMShare": 0.8,
              "maxResources": {
                "cpuPercent": 0.1,
                "memoryPercent": 0.1
              },
              "maxRunningApps": 50,
              "minResources": {
                "memory": 40960,
                "vcores": 10
              },
              "scheduleName": "default",
              "weight": 1.0
            }
          ],
          "schedulingPolicy": "drf"
        },
        {
          "name": "default",
          "queues": [],
          "schedulablePropertiesList": [
            {
              "maxAMShare": 0.8,
              "maxResources": {
                "cpuPercent": 0.1,
                "memoryPercent": 0.1
              },
              "maxRunningApps": 100,
              "scheduleName": "default",
              "weight": 8.0
            }
          ],
          "schedulingPolicy": "drf"
        }
      ],
      "schedulablePropertiesList": [
        {
          "scheduleName": "default",
          "weight": 1.0
        }
      ],
      "schedulingPolicy": "drf"
    }
  ],
  "users": []
}

 

 我们设置了fair的容量及策略那么实际是什么样呢?

首先 yarn total mem=740 GB=757760MB yarn total_core=384

先分析第一个队列fdw_queue 

maxAMShare=0.8

cpuPercent=98.8

MemPercent=98.8

所以

该队列运行的能够申请最大内存 maxMem=757760*99.8=756244.48MB

该队列运行中能够申请的最大core maxCore=384*99.8%=383.232=383core

(这个AMShare是占用该队列的百分比 不是占用所有资源的百分比)

该队列中所有app的am能够申请的最大内存 maxAM=maxMem756244.48*0.8=604995.584MB

该队列中所有app的am能够申请的最大core maxAMCore=383.232*0.8=306.5856core

该队列能够同时运行的最大应用 maxRunningApps=300

 实际中可以看到

AM MAX RESOURCE  MEM=604996  CORE=307

MAX RESOURCE MEM=756244 CORE=383 

然后number Active application= 11 = AM USED RESOURCE 中的vcore

used resource 就是正在使用的资源

demand resouce 就是运行在该队列里 所有需要的资源,有可能我现在需要50G 队列只有40G 我还需要等待或者抢占

AM USED RESOURCE  就是am使用的资源  就想我们提交一个spark任务,yarn会先起一个AM然后向rm申请资源划分NM 然后才开始运行Spark任务,一般来说一个app对应一个AM ,而我们一般设置一个AM 一个core 所以 ACTIVE APP = AM USER RESOUCES 里的VCORE

那现在有个问题了 一个AM的MEM是多少? 45056/1024=44G 也就是4G 

后面任务 又变成  38400/1024=37.5G

AM Used Resources:<memory:45056, vCores:11>
AM Used Resources:<memory:38400, vCores:10>

其实这跟我们提交的应用有关...能力有限,暂不研究。 但是为什么会有小数点.5因为下面的

还有  我提交一个hive任务是hive on spark 直接起了6G的,spark.driver.memory=6442450944b  

这列说下一般来说AM 1G-2G就够用了

这里设置的3G 以及 maxAMShare=0.8 导致AM可用内存很大,(实际很大,但是不会全部跑满,一般没影响)

本来准备批判下这个0.8的参数的,后来和负责人聊天才知道,因为最开始开发环境资源较少,如果设置为0.1 那么AM可用资源就相当少例如 50G*0.1=5G  我们一个应用一个AM AM设置为2G 那么只能跑2个APP了。。所以开发环境设置的比较大,生产还是0.1 0.2 。

分析第二个队列realtime_queue

 

 注意这里 写的

"maxResources": {"cpuPercent": 0.1,"memoryPercent": 0.1}

 根据我们上面写的 这里毫无疑问就是错的了。 因为上面的99.8实际是总资源的 99.8%

这里0.1% 啥资源都没有了。

minResources 与yarn web 一样为 40960MB 和10CORE

maxResources这个我估计 是我们设置不合理 所以他直接就就用了最小的了。

maxAMResource 一样  40960*0.8=32768 基本符合

分析第三个队列

 

 maxResouces =757MB core=0 

实际是因为我们设置的

"maxResources": {"cpuPercent": 0.1,"memoryPercent": 0.1}

那么  maxResouces=总内存740G*0.1%=740*1024*0.001=757.76MB 符合

         totoalCore384*0.1%=0.384=0Core

所以总的认真来看我们的设置其实是有不少问题。

再分析下 这个fair是怎么工作的。

 

总内存为740*1024=757760MB

当前任务有4个 757760/4=189440  咦 怎么和图中的189061有点出入?

实际上是 这个队列的内存 740*1024*99.8%/4=189061.12 刚好相等。

fairshare 是什么意思。我借鉴的那篇文章写的很详细。我也说一遍,就当学习了

当前队列里共有756244.48MB内存,当前正在运行的任务有4个那么每个任务都能申请到189061MB内存。实际情况肯定有的需要的多 有的需要的少

那么需要少的,直接全部给了。

需要的多的,先占用了189061MB内存, 然后看其余的任务多出来的够不够。

借用作者的例子

有一条队列总资源12个, 有4个job,对资源的需求分别是: 
job1->1,  job2->2 , job3->6,  job4->5
     第一次算:  12 / 4 = 3 
		job1: 分3 --> 多2个 
		job2: 分3 --> 多1个
		job3: 分3 --> 差3个
		job4: 分3 --> 差2个
	第二次算: 3 / 2  = 1.5   这里的3指得是多的1个+2个=3个 2指的是 job3+job4=2个job
         job1: 分1
		job2: 分2
		job3: 分3 --> 差3个 --> 分1.5 --> 最终: 4.5 
		job4: 分3 --> 差2个 --> 分1.5 --> 最终: 4.5 
	第n次算: 一直算到没有空闲资源

 这里到目前就i有点明白公平队列怎么设置,怎么分配任务比较合理了。

比如我们总资源 1000G  200Core 创建三个队列

queue1  600G 120core  负责集群的主要工作 比如hive spark 

queue2  300G  60Core  负责集群的次要工作  实时flink

queue3  100G  20core  负责集群零散工作      比如突然的导数或者测试用的

那么有个问题来了,比如月结的时候,那个时候queue1 资源占满,queue3测试工作暂时不需要

queue3这部分资源等于没有用,那么怎么办?

重新配置 队列?

yarn 队列里有个抢占机制, 详见下文

https://blog.csdn.net/zhanyuanlin/article/details/71516286icon-default.png?t=M3K6https://blog.csdn.net/zhanyuanlin/article/details/71516286我也学习下。

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值