Yarn组件解密全局资源管理和分配

Yarn组件

Hadoop组件之间的关系

在这里插入图片描述

Yarn的介绍

1、Yarn是Hadoop2.x版本引入的一个新组件
2、Yarn本身没有资源,是来管理集群资源,为分布式计算提供合理的资源分配方案
3、Yarn可以让集群的资源能够统一,高效率给分配
4、Yarn本身也是一个集群:
   主节点:ResourceManager
   从节点:NodeManager

Yarn的集群架构

架构图

在这里插入图片描述

角色

  • Client

    客户端:
      1、作用就是提交任务
      2、既可以提交MapReduce任务,也可以提交Spark任务
    
  • ResourceManager

    1、ResourceManager负责整个集群的资源管理和分配,是一个全局的资源管理系统。
    2、NodeManager以心跳的方式向ResourceManager汇报资源使用情况(目前主要是CPU和内存的使用情况)。
    3、ResourceManager会根据任务的请求为其分配资源,但是不负责具体任务的监控、追踪、运行状态等工作。
     任务的状态由App Master进程来监控
    
  • NodeManager

    1、NodeManager是每个节点上的资源和任务管理器,它来监控每台机器的资源使用情况
    2、NodeManager定时向ResourceManager汇报本节点资源(CPU、内存)的使用情况和Container的运行状态。
    3、NodeManager接收并处理来自ApplicationMaster的Container启动、停止等各种请求。
    
  • Container

    0、该组件只有在执行任务的时候才会启动,jps是看不到的
    1、Container是一个资源容器
    2、Container可以理解为一个类,用来封装资源信息,相当于批条或者银票
     class Container{
        int  内存;
        int  cpu核数;
        String host;
     }
     
     -- 批条或者银票
     ArrayList
     {
     new Container(1G, 2核cpu,node1);
     new Container(1G, 2核cpu,node2);
     new Container(1G,1核cpu,node3);
     }
    
  • ApplicationMaster ( App Master)

    1、该组件只有在执行任务时,才会启动
    2、客户端每提交一个任务,Yarn会自动的启动一个App Master
    3、App Master就相当于一个任务的监工,或者包工头,负责整个Job任务执行状态的监控
    

(面试题)Yarn执行任务的流程

在这里插入图片描述

(面试题)Yarn的调度策略

介绍

1、当同时向Yarn集群多个Job任务时,Yarn如何对资源进行系统的管理,这种管理策略就是Yarn的调度策略

调度策略

  • 队列调度器(FIFO Scheduler)

    1、特点:哪个任务先来,先分配其所有需要的资源
    2、缺点是大的应用可能会占用所有集群资源,这就导致其它应用被阻塞。
    3、该调度方式基本不用
    
  • 容量调度器(Capacity Scheduler) -Apache默认的调度策略

    • 概念
    1、该调度器会将整个集群资源分成几个队列
    2、不同的开发组只需要使用自己的资源队列即可,可以实现资源隔离
    3、这个调度器是Hadoop默认的调度器
    4、容量调度器默认有一个root根队列,下边有一个default子队列
    5、调度器的使用是通过yarn-site.xml配置文件中的
    yarn.resourcemanager.scheduler.class参数进行配置的,默认采用Capacity Scheduler调度器。
    <property>
        <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulere>
    </property>
    
    6、我们可以通过定义队列来实现资源隔离
    

在这里插入图片描述

  • 配置

    1、先备份原来的调度配置文件

    cd /export/server/hadoop-3.3.0/etc/hadoop
    cp capacity-scheduler.xml capacity-scheduler.xml_bak
    

    2、打开/export/server/hadoop-3.3.0/etc/hadoop/capacity-scheduler.xml文件,配置以下内容

    =方案1:没有default队列=

    <?xml version="1.0"?>
    <configuration>
    	<!-- 分为两个队列,分别为prod和dev -->  
    	<property>
    		<name>yarn.scheduler.capacity.root.queues</name>
    		<value>prod,dev</value> 
    	</property>
    	<!-- 设置prod队列40% -->      
    	<property>
    		<name>yarn.scheduler.capacity.root.prod.capacity</name>
    		<value>40</value>
    	</property>
        <!-- 设置dev队列60% -->  
    	<property>
    		<name>yarn.scheduler.capacity.root.dev.capacity</name>
    		<value>60</value> 
    	</property>
    		<!-- 设置dev队列可使用的资源上限为75% -->  
    	<property>
    		<name>yarn.scheduler.capacity.root.dev.maximum-capacity</name>
    		<value>75</value> 
    	</property>
    	<!-- dev继续分为两个队列,分别为eng和science -->      
    	<property>
    		<name>yarn.scheduler.capacity.root.dev.queues</name>
    		<value>eng,science</value> 
    	</property>
    	<!-- 设置eng队列50% -->    
    	<property>
    		<name>yarn.scheduler.capacity.root.dev.eng.capacity</name>
    		<value>50</value> 
    	</property>
    	<!-- 设置science队列50% -->   
    	<property>
    		<name>yarn.scheduler.capacity.root.dev.science.capacity</name>
    		<value>50</value>
    	</property>
    </configuration>
    

在这里插入图片描述

===方案2:有Default队列===

```xml
<?xml version="1.0"?>
<configuration>
	<!-- 分为两个队列,分别为prod和dev -->  
	<property>
		<name>yarn.scheduler.capacity.root.queues</name>
		<value>default,prod,dev</value> 
	</property>
	<!-- 设置default队列80% -->      
	<property>
		<name>yarn.scheduler.capacity.root.default.capacity</name>
		<value>80</value>
	</property>
	
	<!-- 设置prod队列10% -->      
	<property>
		<name>yarn.scheduler.capacity.root.prod.capacity</name>
		<value>10</value>
	</property>
	<!-- 设置prod队列可使用的资源上限为80% -->  
	<property>
		<name>yarn.scheduler.capacity.root.prod.maximum-capacity</name>
		<value>80</value> 
	</property>
	
    <!-- 设置dev队列10% -->  
	<property>
		<name>yarn.scheduler.capacity.root.dev.capacity</name>
		<value>10</value> 
	</property>
	
		<!-- 设置dev队列可使用的资源上限为75% -->  
	<property>
		<name>yarn.scheduler.capacity.root.dev.maximum-capacity</name>
		<value>75</value> 
	</property>
	<!-- dev继续分为两个队列,分别为eng和science -->      
	<property>
		<name>yarn.scheduler.capacity.root.dev.queues</name>
		<value>eng,science</value> 
	</property>
	<!-- 设置eng队列50% -->    
	<property>
		<name>yarn.scheduler.capacity.root.dev.eng.capacity</name>
		<value>50</value> 
	</property>
	<!-- 设置science队列50% -->   
	<property>
		<name>yarn.scheduler.capacity.root.dev.science.capacity</name>
		<value>50</value>
	</property>
</configuration>
```

在这里插入图片描述

3、重启Yarn

```shell
stop-yarn.sh
start-yarn.sh
```

4、执行测试程序 

```shell
hadoop jar /export/server/hadoop-3.3.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar pi -Dmapreduce.job.queuename=eng  2 10
```

5、通过8088页面的Scheduler菜单查看资源使用情况
  • 公平调度器(Fair Scheduler)

    该调度器会将整个资源平均分配给job,所有执行的Job一视同仁
    

Yarn的关键参数

#以下参数都是在yarn-site.xml中配置
设置container分配最小内存
yarn.scheduler.minimum-allocation-mb 1024  给应用程序container分配的最小内存
 
设置container分配最大内存
yarn.scheduler.maximum-allocation-mb 8192 给应用程序container分配的最大内存
 
设置每个container的最小虚拟内核个数
yarn.scheduler.minimum-allocation-vcores 1 每个container默认给分配的最小的虚拟内核个数
 
设置每个container的最大虚拟内核个数
yarn.scheduler.maximum-allocation-vcores 32 每个container可以分配的最大的虚拟内核的个数
 
设置NodeManager可以分配的内存大小
yarn.nodemanager.resource.memory-mb 8192 nodemanager 可以分配的最大内存大小,默认8192Mb
 
定义每台机器的内存使用大小
yarn.nodemanager.resource.memory-mb 8192
 
定义交换区空间可以使用的大小
交换区空间就是讲一块硬盘拿出来做内存使用,这里指定的是nodemanager的2.1倍
yarn.nodemanager.vmem-pmem-ratio 2.1  
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Hadoop YARN(Yet Another Resource Negotiator)是Hadoop的一个资源管理和作业调度的框架,它是Hadoop 2.x版本中引入的重要组件YARN的设计目的是解决早期版本Hadoop MapReduce框架中的一些问题。 YARN的主要组件包括ResourceManager(资源管理器)、NodeManager(节点管理器)、ApplicationMaster(应用程序管理器)和Container(容器)。 ResourceManager是整个集群的资源管理节点,它负责管理分配集群中的资源。ResourceManager在启动时向集群中的各个NodeManager发送心跳信息,以获取每个节点上的可用资源信息。当有任务提交到集群时,ResourceManager负责为任务分配资源,并监控任务的运行状态。 NodeManager是每个节点上的资源管理组件,它负责管理单个节点上的资源。NodeManager会向ResourceManager发送心跳信息,以汇报节点上的可用资源和任务运行状态。当ResourceManager给节点分配任务时,NodeManager会启动对应的容器来运行任务。 ApplicationMaster是运行在集群中的每个应用程序的主要管理组件。它负责申请资源、监控任务的运行状态、处理任务的失败和重新调度、与ResourceManager和NodeManager交互等。每个应用程序都有一个独立的ApplicationMaster。 Container是YARN中的资源抽象单位,它封装了一个或多个物理资源(如CPU、内存、磁盘等)。Container是ResourceManager向NodeManager分配任务所使用的资源单位。每个任务都在一个独立的容器内进行,容器提供了隔离和资源控制的功能。 通过使用YARN这个资源管理组件,Hadoop可以更好地管理集群中的资源,实现任务的有效调度与执行。YARN的引入使得Hadoop不仅仅局限于MapReduce,还可以支持其他计算框架,如Spark、Storm等,为大数据处理提供了更多的可能性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

留不住的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值