YARN--资源管理与任务调度

1、YARN的资源分配

  • 每个NodeManager能使用机器的多少资源

  • 每个程序的每个Task使用多少资源来运行

  • YARN的资源配置

    • 每台NodeManger能够使用的最大物理内存数
      yarn.nodemanager.resource.memory-mb 8192
    • 每台NodeManger能够使用的最大物理CPU核数
      yarn.nodemanager.resource.cpu-vcores 8
    • 每个应用最少申请的内存
      yarn.scheduler.minimum-allocation-mb 1024
    • 每个应用最多申请的内存
      yarn.scheduler.maximum-allocation-mb 8192
    • 每个应用最少申请的CPU核数
      yarn.scheduler.minimum-allocation-vcores 1
    • 每个应用最多申请的CPU核数,这个值一般等于最大申请内存的GB值
      yarn.scheduler.maximum-allocation-vcores 8
    • 虚拟内存,实际上硬盘存储,将内存中暂时不需要处理的数据先写入硬盘,需要用到的时候再读进来
      yarn.nodemanager.vmem-pmem-ratio 2.1
      关闭物理内存检查-
      yarn.nodemanager.pmem-check-enabled false
    • 关闭虚拟内存检查
      yarn.nodemanager.vmem-check-enabled false
  • 上面的这些参数值,在实际工作中,要根据具体的机器的资源来合理的更改

2、YARN的任务调度

  • 什么是调度?
    • 如果我们向YARN中提交运行了多个程序
    • YARN中整个集群的资源是固定
    • 谁先执行,谁后执行,大家怎么分配资源

调度类型:三种

FIFO:先进先出

YARN中构建一个队列【管道:一头进,一头出】

  • 所有提交的任务都按照提交的时间放到队列中
  • 先放入的程序,享有整个YARN中的所有资源,哪怕你用不了,那也是你的
  • 直到先放进去的程序运行完成,才会运行第二个程序

特点

  • 单队列,先进先出
  • 运行的程序,享有所有资源
  • 程序不能并行也不能并发
    • 并行:多个程序在不同的队列中同时运行
    • 并发:在一个队列中多个程序同时运行
  • 这种方式不会选用的

Capacity:容量调度机制

YARN中构建多个队列,每个队列是FIFO

  • 将整个YARN的资源分配到不同的队列中
    • YARN:24core 24GB
    • 队列1:12core 12GB
    • 队列2:12Core 12GB
  • 运行程序时,可以指定将程序提交到哪个队列中运行

特点

  • 多队列,但是每个队列内部还是FIFO
  • 并行运行多个程序,每个程序运行在不同的队列中
  • 支持资源的动态抢占:如果队列1的资源不够,队列2的资源非常充足,借队列2的资源来运行
  • 举例
    • 程序1:队列1:13core13GB
    • 队列2没有程序,队列1可以跟队列2借,程序执行完成以后还回去
  • 这种方式是Apache版本的Hadoop默认的调度方式
  • 提交程序时,如何设置指定提交到哪个队列中运行: mapreduce.job.queuename = default

Fair:公平调度机制

这种方式是CDH版本的默认调度方式,也是工作中普遍使用的方式

  • YARN中构建多个队列,每个队列是公平的共享资源的
  • 每个队列里是可以同时运行多个程序的
  • 支持一个队列中并发运行多个程序
    • 第一个程序:会享有这个队列的所有资源
    • 第二个程序:将当前空闲的资源与第二个程序进行平分
    • |
    • 让每个程序都能拿到资源

特点

  • 多队列,队列内部的每个程序共享资源
  • 允许一个队列中并发运行,运行多个队列并行运行
  • 也支持队列间的资源的动态抢占
  • 指定队列程序的优先级
  • 修改调度机制的配置:yarn-site.xml
yarn.resourcemanager.scheduler.class=   org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
|
修改为公平调度
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
  • 指定公平调度的配置文件,配置文件中定义每个队列以及每个队列的资源
    yarn.scheduler.fair.allocation.file etc/hadoop/fair-scheduler.xml
  • 没有指定队列名时,是否使用用户名作为队列名称
    yarn.scheduler.fair.user-as-default-queue true
  • 是否允许资源抢占
    yarn.scheduler.fair.preemption true
  • 最大抢占比例
    yarn.scheduler.fair.preemption.cluster-utilization-threshold 0.8
  • 是否启用权重
    yarn.scheduler.fair.sizebasedweight true
  • 是否允许分配多个container
    yarn.scheduler.fair.assignmultiple true
  • 是否允许分配多个container
    yarn.scheduler.fair.max.assign 20
  • 放弃等待优先本地计算的节点比例,-1表示都不放弃
    yarn.scheduler.fair.locality.threshold.node -1
  • 放弃等待优先机架计算的节点比例,-1表示都不放弃
    yarn.scheduler.fair.locality.threshold.rack -1
  • 是否允许创建未定义的队列
    yarn.scheduler.fair.allow-undeclared-pools true
  • 表示重新计算公平调度的间隔,单位毫秒
    yarn.scheduler.fair.update-interval-ms 500
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值