MapReduce V2---Yarn的架构及其执行原理

2024-09-05 08:58

本文主要是介绍MapReduce V2---Yarn的架构及其执行原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. MRv1的局限性

   1):扩展性差

           MRv1中,Jobracker同事兼备了资源管理作业控制(job的生命周期管理(task调度,跟踪task过程状态,task处理容错两个功能。

    单个的jobtracker无论在内存还是其他资源方面总存在瓶颈,在伸缩性、资源利用率、运行除mapreduce的其他任务等方面都会有限制。

MRv2 Yarn框架把资源调度和task管理监控分离开来,由资源管理器NodeManager负责资源调度,每一个application(job)由一个AppMaster负责对task进行调度管理监控,并且可以监控AppMaster的状态,有问题可以在其他节点重启。

   2):资源利用率低

     MRv1 mapreduce框架使用slot做资源表示单位,并且map slotreduce slot分离的,这样资源不能共享,资源利用率不高,yarn使用节点的cpu、内存等资源作为资源表示单位,大大提高了资源利用率。


   


2.Yarn的组成

ResourceManager(RM)

RM是全局资源管理器,负责整个系统的资源管理和分配。

主要由两个组件组成:调度器和应用程序管理器(ASM)

调度器:根据容量,队列等限制条件,将系统中的资源分配给各个正在运行的应用程序,不负责具体应用程序的相关工作,比如监控或跟踪状态

应用程序管理器:负责管理整个系统中所有应用程序

ApplicationMaster(AM)

用户提交的每个应用程序均包含一个AM

AM的主要功能:

     (1)与RM调度器协商以获取资源(用Container表示)

     (2)将得到的任务进一步分配给内部的任务

     (3)与NM通信以自动/停止任务

     (4)监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务

当前YARN自带了两个AM实现

     一个用于演示AM编写方法的实例程序distributedshell

     一个用于Mapreduce程序---MRAppMaster

其他的计算框架对应的AM正在开发中,比如spark等。

Nodemanager(NM)和Container

NM是每个节点上的资源和任务管理器

      (1)定时向RM汇报本节点上的资源使用情况和各个Container的运行状态

      (2)接收并处理来自AM的Container启动/停止等各种要求

Container是YARN中的资源抽象,它封装了某个节点上的多维度资源

     YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源


3.Yarn的执行流程

   

(1):由客户端提交一个应用,由RM的ASM接受应用请求

提交过来的应用程序包括哪些内容:

a:ApplicationMaster

b:启动Applicationmaster的命令

c:本身应用程序的内容

(2):提交了三部分内容给RM,然后RM找NodeManager,然后

Nodemanager就启用Applicationmaster,并分配Container

 

接下来我们就要执行这个任务了,

(3):但是执行任务需要资源,所以我们得向RM的ASM申请执行任务的资源(它会在RM这儿注册一下,说我已经启动了,注册了以后就可以通过RM的来管理,我们用户也可以通过RM的web客户端来监控任务的状态)ASM只是负责APplicationMaster的启用

(4)我们注册好了后,得申请资源,申请资源是通过第四步,向ResourceScheduler申请的

(5)申请并领取资源后,它会找Nodemanager,告诉他我应经申请到了,然后Nodemanager判断一下,

(6)知道他申请到了以后就会启动任务,当前启动之前会准备好环境,

(7)任务启动以后会跟APplicationmaster进行通信,不断的心跳进行任务的汇报。

(8)完成以后会给RM进行汇报,让RSM撤销注册。然后RSM就会回收资源。当然了,我们是分布式的,所以我们不会只跟自己的Nodemanager通信。也会跟其他的节点通信。

这篇关于MapReduce V2---Yarn的架构及其执行原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138503

相关文章

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

kotlin中的模块化结构组件及工作原理

《kotlin中的模块化结构组件及工作原理》本文介绍了Kotlin中模块化结构组件,包括ViewModel、LiveData、Room和Navigation的工作原理和基础使用,本文通过实例代码给大家... 目录ViewModel 工作原理LiveData 工作原理Room 工作原理Navigation 工

Java的volatile和sychronized底层实现原理解析

《Java的volatile和sychronized底层实现原理解析》文章详细介绍了Java中的synchronized和volatile关键字的底层实现原理,包括字节码层面、JVM层面的实现细节,以... 目录1. 概览2. Synchronized2.1 字节码层面2.2 JVM层面2.2.1 ente

MySQL的隐式锁(Implicit Lock)原理实现

《MySQL的隐式锁(ImplicitLock)原理实现》MySQL的InnoDB存储引擎中隐式锁是一种自动管理的锁,用于保证事务在行级别操作时的数据一致性和安全性,本文主要介绍了MySQL的隐式锁... 目录1. 背景:什么是隐式锁?2. 隐式锁的工作原理3. 隐式锁的类型4. 隐式锁的实现与源代码分析4

MySQL中Next-Key Lock底层原理实现

《MySQL中Next-KeyLock底层原理实现》Next-KeyLock是MySQLInnoDB存储引擎中的一种锁机制,结合记录锁和间隙锁,用于高效并发控制并避免幻读,本文主要介绍了MySQL中... 目录一、Next-Key Lock 的定义与作用二、底层原理三、源代码解析四、总结Next-Key L

Spring Cloud Hystrix原理与注意事项小结

《SpringCloudHystrix原理与注意事项小结》本文介绍了Hystrix的基本概念、工作原理以及其在实际开发中的应用方式,通过对Hystrix的深入学习,开发者可以在分布式系统中实现精细... 目录一、Spring Cloud Hystrix概述和设计目标(一)Spring Cloud Hystr