大数据开发Yarn实战(第十二篇)

329 阅读2分钟

一、Yarn信息

从Hadoop2开始,官方把资源管理单独剥离出来,主要是为了考虑后期作为一个公共的资源管理平台,任何满足规则的计算引擎都可以在它上面执行。所以Yarn可以实现Hadoop集群的资源共享,不仅仅可以跑MapReduce、还可以跑Spack、Flink

1.1、Yarn的架构

Yarn主要负责集群资源的管理和调度,支持主从架构,主节点最多可以有2个,从节点可以有多个。其中

  • ResourceManager是主节点,主要负责集群资源的分配和管理
  • NodeManager是从节点,主要负责当前机器资源管理
1.2、Yarn资源管理模型

Yarn主要管理内存和CPU这两种资源类型

  • 当NodeManager节点启动的时候自动向ResourceManager注册,将当前节点上的可用CPU信息和内存信息注册上去
  • 这样所有的NodeManager注册完成之后,ResourceManager就知道目前集群的资源总量了

http://192.168.234.100:8088/cluster/nodes

image-20220912184311816

但是我们虚拟机没有分配8G的内存,为什么这边资源管理会显示8G呢?

这是yarn-default.xml有这些默认资源的配置

  • yarn.nodemanager.resource.memory-mb:单节点可分配的物理内存总量,默认是8MB*1024
  • yarn.nodemanager.resource.cpu-vcores:单节点可分配的虚拟CPU个数,默认是8

实际的开发中,会根据服务器的环境配置进行修改。

二、Yarn中的调度器

  1. FIFO Scheduler:先进先出调度策略

    大家都是排队的,如果你的任务申请不到足够的资源,那你就等着,等前面的任务执行结束释放了资源之后你再执行。这种在有些时候是不合理的,因为我们有一些任务的优先级比较高,我们希望任务提交上去立刻就开始执行,这个就实现不了了

  2. Capacity Scheduler:FIFO Scheduler的多队列版本

    先把集群中的整块资源划分成多份,我们可以人为的给这些资源定义使用场景,例如图里面的queue A里面运行普通的任务,

    queueB中运行优先级比较高的任务。这两个队列的资源是相互对立的。但是注意一点,队列内部还是按照先进先出的规则。

  3. FairSheduler:多队列,多用户共享资源

    每个队列中的任务共享其所在队列的所有资源,不需要排队等待资源。具体是这样的,假设我们向一个队列中提交了一个任务,这个任务刚开始会占用整个队列的资源,当你再提交第二个任务的时候,第一个任务会把他的资源释放出来一部分给第二个任务使用

image-20220912184918447

从hadoop2开始, CapacitySchedule r也 是集群中的默认调度器了。