【Hadoop Yarn01】 Yarn资源调度器&参数配置


yarn是一个资源调度平台,相当于一个分布式的操作系统平台,负责为运算程序提供服务器运算资源,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。

1.Yarn基础架构

核心组件:

  • ResourceManager
  • NodeManager
  • ApplicationMaster
  • Container
    在这里插入图片描述

ResourceManager(RM)

职责:
(1)接收Yarn客户端的请求,比如提交计算作业(MR、Spark、Flink)
(2)监控NodeManager 的资源(CPU\内存)
(3)启动和监控ApplicationMaster (AppMaster是一个进程,一个计算作业对应一个AppMaster)
(4)集群资源的分配和调度

NodeManager(NM)

职责:
(1)管理单个节点的资源
(2)处理来自RM的命令
(3)处理来自ApplicationMaster的命令

ApplicationMaster(AM)

职责:
(1)为计算程序(一个MR、Spark、flink任务)申请计算所需要的资源并且分配给内部的任务
(2)监控MapTask、ReduceTask
如果某个Task计算任务挂了,就会重新申请资源来执行task

Container

是yarn集群中资源的抽象,封装了NodeManager节点上的多种资源(内存、cpu、磁盘、网络等);
AppMaster、MapTask、ReduceTask等进程都是运行在Container中的;所以Container就是一个子任务的运行容器;

2.Yarn工作流程

在这里插入图片描述
在命令行中执行hadoop jar xxx 一个MR程序会走怎样的流程?
(0)MR的Driver类中,提交任务job.waitForCompletion()方法会创建一个客户端,本地模式下叫localRunner,集群模式下叫YarnRunner
(1)YarnRunner向ResourceManager申请运行一个应用程序(计算任务)
(2)RM将该应用程序(计算Job)的一些信息所要存放的路径返回给YarnRunner

(1)job的相关信息
- Job.split   切片信息;控制MapTask的个数
- job.xml     job所需要的资源配置信息
- wc.jar       jar包;MR程序代码
(2)job信息存放路径
如果是本地模式,那么就在本地机器上创建一个staging目录来存放
如果是集群模式,在hdfs的一个staging目录中存放

(3)YarnRunner该job运行所需的信息提交到HDFS上的指定目录中
(4)job资源提交完毕后,向RM申请运行mrAppMaster进程
(5)RM将请求初始化成一个Task,放进调度队列中,等待调度执行
(6)Task被调度的时候,其中一个NodeManager会领取到Task,紧接着该NodeManager创建容器Container,来运行MRAppmaster进程
(8)Appmaster进程会从HDFS上拷贝job的配置信息到本地节点
(9)Appmaster拿到job配置信息后,也就有了切片信息,此时AM会向RM 申请运行MapTask的资源

申请在NodeManager节点上开启task进程的请求都会被封装成Task进入ResourceManager的任务调度器中,调度执行

(10)RM会在有资源的NodeManager节点上创建容器来运行MapTask任务

如果NodeManager节点资源充足,同时分配多个container来运行MapTask也是ok的

(11)此时MapTask的容器有了,MRAppmaster会向两个接收到任务的NodeManager发送程序启动脚本,分别启动MapTask
(12) MapTask执行完毕,会在NodeManager上产生结果分区且区内有序的结果数据,一个MapTask对应一个
(13)MrAppMaster等待所有MapTask运行完毕后,再次向RM申请容器,运行ReduceTask进程

(1)这里说等待所有MapTask运行完毕后,申请运行ReduceTask是不严谨的;
Hadoop有优化机制会提前ReduceTask的执行
(2) MapTask执行完了就会销毁容器

(14)ReduceTask向MapTask获取相应分区的数据。
(15)程序运行完毕后,MR会向RM申请注销自己。

HDFS\MR\Yarn的配合

在这里插入图片描述

3.Yarn资源调度器

理解调度器的功能

首先要分清两个概念:任务调度和任务执行;
调度器 相当于食堂打饭阿姨,阿姨打饭是调度,吃饭是执行;
FIFO调度器就相当于食堂阿姨只能给排队的第一个人打饭;但不意味着同一时刻只能有一个任务再执行。

Hadoop作业调度器主要有三种:

  • FIFO
  • Capacity Scheduler
  • Fair Scheduler

Apache Hadoop3.1.3默认的资源调度器是Capacity Scheduler
CDH 默认调度器是Fair Scheduler

具体设置详见:yarn-default.xml文件

<property>
    <description>The class to use as the resource scheduler.</description>
    <name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>

3.1 FIFO调度器

在这里插入图片描述
job先进先出;必须等第一个job执行完了,才能调度第二个job分配资源来运行;

3.2 Capacity Scheduler

在这里插入图片描述
(1)多条FIFO队列
(2)每条队列都有资源占比分配、资源上下限
(3)队列之间可以借资源;
(4)可以针对用户限定其可用资源上限

调度算法:
在这里插入图片描述
Job层面的分配:
(1)队列之间,小队列中的job优先分配资源
(2)队列中,按照job优先级和提交时间顺序
Job中Task层面的分配:

3.3 公平调度器

在这里插入图片描述
(1)和容量调度器的共同点
(2)和容量调度器的区别
默认使用的调度算法不同,公平调度器默认用FAIR,容量调度器是FIFO;如果公平调度器改成FIFO,和容量没区别了
(3)FIFO和FAIR的宏观区别:
容量调度器优先给小队列的job分配资源,FAIR优先给缺额大的job分配资源;
公平的FAIR策略是队列中所有的job宏观上都会被分配资源

缺额的含义:
某一时刻应该获取的资源和实际获取的资源的差值;


FAIR策略理论
在这里插入图片描述
Fair策略演示
(1)队列之间的资源分配
在这里插入图片描述

(2)job之间的资源分配
在这里插入图片描述

DRF策略
在这里插入图片描述

3.4 Yarn调度器多队列配置(☆)

4.Yarn常用命令

为了方便演示,先启动一个wc程序
在这里插入图片描述

1.yarn application查看任务

(1)查看所有在yarn集群上正在运行的任务

yarn application -list

如果任务结束了,就看不到了
在这里插入图片描述

(2)查看所处状态的任务
yarn application - list -appStates FINISHED

状态有:
FINISHED
ALL
NEW
NEW_SAVING
SUBMITTED
ACCEPTED
RUNNING
FINISHED
FAILED
KILLED

在这里插入图片描述
(3) kill application

yarn application -kill [application-id]

2.yarn logs 查看日志

(1) 查看Application日志 [重要]

yarn logs -applicationId [application-id]

如果yarn ui页面或者没有配置历史服务器,就可以通过这个命令查看

(2) 查看一个container中任务的执行日志

yarn los -applicationId [application-id] -containerId [containerid]

3.yarn applicationattempt 查看尝试运行的任务

尝试:任务正在运行时候,处于什么状态
(1) 这个可以查看到容器ID

yarn applicationattempt -list [application-id]

在这里插入图片描述
(2) 查看任务状态
在这里插入图片描述

4.yarn container 查看容器

在这里插入图片描述

5.yarn node 查看节点状态

在这里插入图片描述

6.yarn rmadmin 更新任务配置

在这里插入图片描述
这个命令很重要,如果我们修改了yarn的队列配置,不需要重启yarn,直接执行这个命令,yarn就能重新读取配置文件;
注意,只和队列配置有关;

7.yarn queue 查看队列状态

在这里插入图片描述

5.yarn生产环境核心配置参数

1.ResourceManager相关配置

yarn.resourcemanager.scheduler.class

  • 功能:配置调度器种类;
  • apache默认是fifo,cdh默认是fair

yarn.resourcemanager.scheduler.thread-count

  • resourcemanager能够接受的客户端线程;
  • 默认50个

2.NodeManager相关

yarn.nodemanager.resource.detect-hardware-capabilities

  • 是否让yarn自己检测硬件配置,默认false;
  • 一般手动配置NM

yarn.nodemanager.resource.count-logical-processors-as-cores

  • 是否将虚拟核数当作CPU核数,默认false;
  • 如果NM之间的配置不同,有的配置高,有的配置低,纯按照物理核,性能好的浪费资源,所以此时开启这个配置

yarn.nodemanager.resource.pcores-vcores-multiplier

  • 此配置项依赖上面一个
  • 虚拟核能顶多少个核物理核,该参数应设置为2,默认1

yarn.nodemanager.resource.memory-mb

  • NodeManager节点上缴给yarn可用的内存;默认8G

yarn.nodemanager.resource.system-reserved-memory-mb

  • Nodemanager为系统保留多少内存;
  • 这个参数和上面一个参数是相反的,因此二者只配置一个即可

yarn.nodemanager.resource.cpu-vcores

  • Nodemanager上缴给yarn的cpu核数;默认8个

yarn.nodemanager.pmem-check-enabled

  • 是否开启物理内存检查限制,默认打开;
  • 检查NM内存使用情况,如果不加控制,可能会占用系统内存,导致机器崩溃;

yarn.nodemanager.vmene-check-enabled

  • 是否开启虚拟内存检查限制,默认打开;

yarn.nodemanager.vmem-pmem-ratio

  • 虚拟内存和物理内存比例;默认2:1

3.Container相关

yarn.scheduler.minimum-allocation-mb

  • 容器最小内存,默认1g

yarn.scheduler.maxmum-allocation-mb

  • 容器最大内存,默认8g;不能超过NM上缴的内存

yarn.scheduler.minimum-allocation-vcores

  • 容器最小cpu核数,默认1个

yarn.scheduler.minimum-allocation-mb

  • 容器最大cpu核数,默认4个;不能超过NM上缴的CPU核数

4. AppMaster进程相关

4.1 增加ApplicationMaster资源比例

针对容量调度器并发度低的问题,考虑调整yarn.scheduler.capacity.maximum-am-resource-percent该参数。
默认值是0.1,表示集群上AM最多可使用的资源比例,目的为限制过多的app数量。

(1)在hadoop102的/opt/module/hadoop-3.1.3/etc/Hadoop/capacity-scheduler.xml文件中修改如下参数值

[atguigu@hadoop102 hadoop]$ vim capacity-scheduler.xml

<property>
    <name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
    <value>0.5</value>
    <description>
      集群中用于运行应用程序ApplicationMaster的资源比例上限,
该参数通常用于限制处于活动状态的应用程序数目。该参数类型为浮点型,
默认是0.1,表示10%。所有队列的ApplicationMaster资源比例上限可通过参数
yarn.scheduler.capacity.maximum-am-resource-percent设置,而单个队列可通过参数yarn.scheduler.capacity.<queue-path>.maximum-am-resource-percent设置适合自己的值。
    </description>
</property>

(2)分发capacity-scheduler.xml配置文件
[atguigu@hadoop102 hadoop]$ xsync capacity-scheduler.xml
(3)关闭正在运行的任务,重新启动yarn集群
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh

多队列配置

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值