yarn底层原理详解:(第33天)

news2024/11/15 23:43:41

系列文章目录

一、yarn总体架构
二、yarn核心组件及功能
三、yarn资源分配与调度
四、yarn提交和执行流程
五、yarn调度算法
六、yarn安全性与容错性


文章目录

  • 系列文章目录
  • 前言
  • 一、总体架构
  • 二、核心组件及功能
    • 1. ResourceManager(RM)
    • 2. NodeManager(NM)
    • 3. ApplicationMaster(AM)
  • 三、资源分配与调度
  • 四、yarn提交和执行流程
  • 五、调度算法
    • 1. FIFO(先进先出)调度器
    • 2. Capacity Scheduler(容量调度器)
    • 3. Fair Scheduler(公平调度器)
  • 六、安全性与容错性


前言


本文主要详解了Hadoop中的Yarn的底层原理。

一、总体架构

Yarn的总体架构遵循主从模式(Master/Slave),主要由两个核心组件构成:ResourceManager(RM)和NodeManager(NM)。

  • ResourceManager(RM):全局资源管理器,负责整个集群的资源管理和调度。它接收来自客户端的作业请求,并为其分配资源。RM内部包含调度器(Scheduler)和应用程序管理器(ApplicationMaster,简称AM)管理器。
  • NodeManager(NM):节点资源任务管理器,负责具体服务器上的资源和任务管理。每个集群节点都会运行一个NM进程,它向RM注册自己的资源信息,并接收RM分配的任务来执行。

二、核心组件及功能

1. ResourceManager(RM)

RM是Yarn集群的资源管理中心,负责资源的分配和调度。它主要包括以下两个组件:

  • 调度器(Scheduler):资源分配算法的实现,根据应用程序的资源需求和集群的资源状况进行资源分配。Yarn内置了几种资源调度算法,如Fair Scheduler、Capacity Scheduler等,用户也可以根据需要开发自己的调度算法。
  • 应用程序管理器(AM管理器):负责应用程序的提交、监控应用程序的运行状态等。当应用程序提交到Yarn时,RM会为其启动一个ApplicationMaster进程,并通过AM管理器进行管理和监控。

2. NodeManager(NM)

NM是Yarn集群的节点管理器,负责具体节点上的资源和任务管理。它主要执行以下任务:

  • 资源注册:启动时向RM注册自己的资源信息,包括CPU、内存、磁盘等。
  • 任务执行:接收RM分配的任务,在本地启动Container来执行这些任务。Container是Yarn中的资源抽象,封装了节点的多维度资源。
  • 状态汇报:定期向RM汇报本节点的资源使用情况和任务执行情况。

3. ApplicationMaster(AM)

AM是应用程序的管理者,每个提交到Yarn的应用程序都会启动一个AM进程。AM的主要职责包括:

  • 资源申请:与RM的调度器协商获取执行资源,即向RM申请Container。
  • 任务分发:获得资源后,将应用程序的代码和数据分发到相应的NodeManager上,并在Container中启动任务。
  • 状态监控:监控任务的执行情况,如果任务失败则重新申请资源并启动任务。

三、资源分配与调度

Yarn的资源分配和调度过程是一个复杂的交互过程,主要包括以下几个步骤:

  1. 作业提交:客户端将作业提交到RM,包括作业的配置信息、资源需求等。
  2. 资源申请:RM的调度器根据作业的资源需求和集群的资源状况进行资源分配,为作业分配一个或多个Container。
  3. 任务分发:AM获得资源后,将作业的任务分发到相应的NM上,并在Container中启动任务。
  4. 任务执行与监控:任务在Container中执行,NM监控任务的执行情况,并定期向RM汇报。
  5. 资源释放:任务执行完毕后,AM向RM申请注销自己并释放占用的资源。

四、yarn提交和执行流程

在这里插入图片描述
在这里插入图片描述

1.客户端提交一个MR程序给ResourceManager(校验请求是否合法...)

2.如果请求合法,ResourceManager随机选择一个NodeManager用于生成appmaster(应用程序控制者,每个应用程序都单独有一个appmaster)
3.appmaster会主动向ResourceManager的应用管理器(application manager)注册自己,告知自己的状态信息,并且保持心跳
4.appmaster会根据任务情况计算自己所需要的container资源(cpu,内存...),主动向ResourceManager的资源调度器(resource scheduler)申请并获取这些container资源

5.appmaster获取到container资源后,把对应指令和container分发给其他NodeManager,让NodeManager启动task任务(maptask任务,reducetask任务)
6.NodeManager要和appmaster保持心跳,把自己任务计算进度和状态信息等同步给appmaster,(注意当maptask任务完成后会通知appmaster,appmaster接到消息后会通知reducetask去maptask那儿拉取数据)直到最后任务完成

7.appmaster会主动向ResourceManager注销自己(告知ResourceManager可以把自己的资源进行回收了,回收后自己就销毁了)

五、调度算法

YARN(Yet Another Resource Negotiator)是Hadoop生态系统中的一个关键组件,主要负责资源管理和作业调度。YARN提供了三种主要的调度方案:FIFO(先进先出)调度器、Capacity Scheduler(容量调度器)和Fair Scheduler(公平调度器)。每种调度方案都有其独特的特征和适用场景。以下是对这三种调度方案的详细解析。

  • FIFO(先进先出):按照作业提交的先后顺序进行调度,简单但不够灵活。
  • Capacity Scheduler(容量调度器):支持多队列管理,每个队列可以配置一定的资源量,并可以嵌套子队列。它提供容量保证和资源隔离,适合多用户共享集群的场景。
  • Fair Scheduler(公平调度器):设计目标是实现资源在时间尺度上的公平分配。它会根据作业的缺额比例来优先为缺额大的作业分配资源,适合对作业执行时间有严格要求的场景。

1. FIFO(先进先出)调度器

在这里插入图片描述

FIFO Scheduler: 把应用按提交的顺序排成一个队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配,以此类推。
好处:  能够保证每一个任务都能拿到充足的资源, 对于大任务的运行非常有好处
弊端:  如果先有大任务后有小任务,会导致后续小任务无资源可用, 长期处于等待状态
应用:  测试环境。因为在生产环境里面,我们需要能够同时运行多个SQL
  • 特征详解:
  1. 单队列管理:
    FIFO调度器采用单队列的方式来管理所有提交的作业。作业按照提交的顺序被放入队列中,先提交的作业先被调度。
  2. 简单易懂:
    FIFO调度器的策略非常简单,不需要复杂的配置,易于理解和使用。这种简单性使得它适合用于测试环境或小型集群。
  3. 不支持多队列:
    由于只有一个队列,FIFO调度器不支持多队列管理,无法根据不同的用户或作业类型进行资源隔离和优先级设置。
  4. 资源利用率低:
    在大型或繁忙的集群中,FIFO调度器可能会导致资源利用率低下。因为大作业可能会长时间占用大量资源,导致后续的小作业长时间等待。
  5. 不支持优先级:
    FIFO调度器默认按照作业提交的顺序进行调度,不支持根据作业的优先级进行资源分配。
  6. 适用场景:
    FIFO调度器适用于资源需求相对简单、作业提交频率不高的场景。例如,在测试环境中,可以使用FIFO调度器来简化资源管理和作业调度的复杂性。

2. Capacity Scheduler(容量调度器)

在这里插入图片描述

Capacity Scheduler: 为每个组织分配专门的队列和一定的集群资源,这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。在每个队列内部,资源的调度是采用的是先进先出(FIFO)策略。
好处: 可以保证多个任务都可以使用一定的资源, 提升资源的利用率
弊端: 如果遇到非常的大的任务, 此任务不管运行在那个队列中, 都无法使用到集群中所有的资源,  导致大任务执行效率比较低,当任务比较繁忙的时候, 依然会出现等待状态
应用: apache开源版本的hadoop
  • 示例:
    调度器的使用是通过yarn-site.xml配置文件中的
    yarn.resourcemanager.scheduler.class参数进行配置的,默认采用Capacity Scheduler调度器
    下面是一个简单的Capacity调度器的配置文件,文件名为capacity-scheduler.xml
    在这里插入图片描述
    prod由于没有设置maximum-capacity属性,它有可能会占用集群全部资源。
    dev的maximum-capacity属性被设置成了75%,所以即使prod队列完全空闲dev也不会占用全部集群资源,也就是说,prod队列仍有25%的可用资源用来应急。

  • 特征详解:

  1. 多队列管理:
    Capacity Scheduler通过多队列的方式来管理资源。每个队列可以配置一定的资源量(如CPU、内存等),并可以嵌套子队列以形成层次结构。
  2. 容量保证:
    管理员可以为每个队列设置资源的最低保证(Minimum Guarantee)和资源使用上限(Maximum Limit)。这可以确保每个队列在资源紧张时仍能获得一定的资源份额,同时防止单个队列占用过多的资源。
  3. 灵活性:
    当一个队列的资源有剩余时,Capacity Scheduler可以将这些资源暂时共享给其他需要资源的队列。一旦该队列有新的作业提交,被借用的资源将归还给原队列。
  4. 多租户支持:
    Capacity Scheduler支持多用户共享集群和多应用程序同时运行。为了防止单个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。
  5. 优先级调度:
    Capacity Scheduler支持根据作业的优先级进行调度。默认情况下,它会按照作业的优先级和提交时间顺序来分配资源。
  6. 资源隔离:
    通过配置不同的队列和子队列,Capacity Scheduler可以实现资源的有效隔离,确保不同用户或作业类型之间的资源使用互不影响。
  7. 适用场景:
    Capacity Scheduler适用于需要多用户共享集群资源、对资源有严格隔离要求的场景。例如,在大型企业或云计算环境中,可以使用Capacity Scheduler来管理不同用户或租户的作业和资源。

3. Fair Scheduler(公平调度器)

在这里插入图片描述

Fair Scheduler :不需要保留集群的资源,因为它会动态在所有正在运行的作业之间平衡资源 , 当一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当后面有小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。

好处:  保证每个任务都有资源可用, 不会有大量的任务等待在资源分配上
弊端: 如果大任务非常的多, 就会导致每个任务获取资源都非常的有限, 也会导致执行时间会拉长
应用: CDH商业版本的hadoop
  • 特征详解:
  1. 多队列管理:
    与Capacity Scheduler类似,Fair Scheduler也支持多队列管理。每个队列可以配置一定的资源量,并可以嵌套子队列以形成层次结构。
  2. 容量保证:
    管理员同样可以为每个队列设置资源的最低保证和资源使用上限,以确保每个队列在资源紧张时仍能获得一定的资源份额。
  3. 公平性:
    Fair Scheduler的设计目标是实现资源在时间尺度上的公平分配。它会根据作业的缺额比例(即应获资源和实际获取资源的差距)来优先为缺额大的作业分配资源。
  4. 灵活的资源分配策略:
    Fair Scheduler允许为每个队列单独设置资源分配方式。除了默认的公平策略外,还可以选择FIFO或DRF(Dominant Resource Fairness)等策略。
  5. 多租户支持:
    与Capacity Scheduler一样,Fair Scheduler也支持多用户共享集群和多应用程序同时运行。为了防止单个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。
  6. 资源抢占:
    Fair Scheduler支持资源抢占机制。当一个队列的资源被过度占用时,其他需要资源的队列可以通过抢占机制来获取必要的资源。
  7. 适用场景:
    Fair Scheduler适用于需要实现资源公平分配、对作业执行时间有严格要求的场景。例如,在科研或数据分析领域,可以使用Fair Scheduler来确保不同项目或团队之间的资源使用公平且高效。

六、安全性与容错性

  • Yarn在设计和实现过程中也充分考虑了安全性和容错性。它提供了多种安全机制来保护集群的安全性和数据的完整性,如身份验证、授权、加密通信等。同时,Yarn也提供了容错机制来应对节点故障、任务失败等情况,确保作业的可靠执行。

  • 综上所述,Yarn的底层原理实现涉及多个关键组件和复杂的交互过程。它通过ResourceManager、NodeManager和ApplicationMaster等组件的协同工作,实现了集群资源的有效管理和作业的高效调度。同时,Yarn也提供了多种调度算法和安全容错机制来满足不同的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1920414.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

达梦数据库dm8安装步骤及迁移

目录 前言: 一、安装部署 1、下载 2、创建用户及安装目录 3、挂载下载的镜像 4、环境配置 5、安装 二、基本使用 1、DM工具使用 2、兼容性配置 2.1 兼容GBK字符集编码 2.2 兼容UTF-8字符集编码 3、创建用户和密码,表空间 4、整理数据库配置 5、启动脚本设置 …

13、Python之函数:简单的参数默认值其实并不简单

目录 引言 日志打印的问题 返回参数默认值的问题 问题产生的原因 关于参数默认值的最佳实践 总结 引言 在前一篇关于Python函数的文章中,我们介绍了函数的基本使用、函数的默认参数、lambda函数的用法,相当于对Python中的函数有了一个入门的介绍。…

动态规划之数字三角形模型+最长上升子序列模型

首先,我们从集合角度重新看待DP: 直接看题:https://www.acwing.com/problem/content/1029/ 就是取纸条的原题,我们令f[i1,j1,i2,j2]表示从(1,1),(1,1)分别走到(i1,j1),(i2,j2)的路径的max i1j1i2j2,于是我们可以把状…

ESP32的芯片有几种

ESP32系列 ESP32芯片截止到24年7月有5个系列: ESP32-C3 ESP32由ESP32-P 系列、ESP32-S 系列、ESP32-C 系列、ESP32-H 系列、ESP32 系列构成。其中ESP32-S分为S3和S2两个小系列;ESP32-C系列分为C6、C5、C3、C2四个小系列,具体如下。 说明&am…

合宙 Air780E模块 AT 指令 MQTT连接

固件说明 重启模块 //tx ATRESET//rx ATRESETOK ^boot.romv!\n RDY^MODE: 17,17E_UTRAN ServiceCGEV: ME PDN ACT 1NITZ: 2024/07/10,08:33:440,0查询模块版本信息 //tx ATCGMR//rx ATCGMRCGMR: "AirM2M_780E_V1161_LTE_AT"OK基本流程 4G模块支持MQTT和MQTT SSl协…

5 MySql

5 MySql 一、简介二、SQL语言2.1 导入外部SQL文件2.2 显示表结构2.3 与创建数据库相关的语句2.4 与表相关的语句2.5 操作表中的数据2.6 7种基本的sql查询 三、SQL的注意点3.1 与集合函数相关3.2 SQL语句的书写与执行过程 四、约束 constraint4.1 作用4.2 功能分类4.3 自增 五、…

读人工智能全传10深度思维

1. 深度思维 1.1. DeepMind 1.1.1. 深度思维 1.1.2. 2014年的员工不足25人 1.1.3. 深度思维公司公开宣称其任务是解决智能问题 1.1.4. 2014年谷歌收购DeepMind,人工智能突然成了新闻热点,以及商业热点 1.1.4.1. 收购报价高达4亿英镑 1.1.4.2. 深度…

差分约束——AcWing 362. 区间

差分约束 定义 差分约束系统是一种在计算机科学和运筹学中用于解决特定类型优化问题的工具。它主要用于处理一类线性不等式组,这些不等式描述了变量之间的相对大小关系,而不是直接的绝对值大小。差分约束系统通常用于路径寻找、调度、资源分配等问题。…

maven私有镜像仓库nexus部署使用

maven私有镜像仓库nexus部署使用 1、Nexus部署 #查找镜像 docker search sonatype/nexus3 #拉取镜像 docker pull sonatype/nexus3 #持久化目录 mkdir -p /data/nexus/data chmod 777 -R /data/nexus/data #启动服务 docker run -d --name nexus3 -p 8081:8081 --restart alw…

javaweb基础知识入门

javaweb 1.基本概念 1.1前言 web开发: web,网页的意思,www.baidu.com 静态web html,css 提供给所有人看的数据始终不会发生变化! 动态web 淘宝...等几乎是所有的网站 提供给所有人看的数据始终会发生变化&#…

mac生成.dmg压缩镜像文件

mac生成.dmg压缩镜像文件 背景准备内容步骤1,找一个文件夹2,制作application替身1,终端方式2,黄金右手方式 3,.app文件放入文件夹4,制作.dmg压缩镜像文件5,安装.dmg 总结 背景 为绕开App Store…

头歌资源库(27)特别的数

一、 问题描述 编程输出一个特别的数,该数是一个由1~9组成的9位数,每个数字只能出现一次,且这个9位数由高位到低位前i位能被i整除。 二、算法思想 创建一个长度为9的数组,用于存放1~9这9个数字。使用回溯算法,从第…

Visual Studio 2019 (VS2019) 中使用 CMake 配置 OpenCV 库(快捷版)

2024.07.11 测试有效 最近需要用一下 opencv 处理图像,简单配置了一下Cmake下的 opencv 库。 没有编译 opencv ,也不知道他们为什么要自己编译 opencv 。 一、下载并安装 OpenCV 1.前往 OpenCV 官方网站 下载适用于您的系统的 OpenCV 安装包。 2.点击直接…

在分布式环境中,怎样保证 PostgreSQL 数据的一致性和完整性?

文章目录 在分布式环境中保证 PostgreSQL 数据的一致性和完整性一、数据一致性和完整性的重要性二、分布式环境对数据一致性和完整性的挑战(一)网络延迟和故障(二)并发操作(三)数据分区和复制 三、保证 Pos…

PFH点特征直方图

PFH特征描述子原理 该算法通过参数化查询关键点与其周围邻域点之间的空间差异,形成一个多维度直方图,从而实现对该点的邻域几何属性的描述。 该方法具有以下三个优势: (1)刚性变换不变性,即不受旋转、平移变换的影响; (2)采样一致性,即改变采样密度,特征保…

【高中数学/指数函数、对数函数、正弦函数】求 y=2^x+x,y=log2_x+x,y=2*sinX+x 的零点位置大小关系

【问题】 已知函数f(x)2^xx,g(x)log2_xx,h(x)2*sinXx 的零点分别是a,b,c,则a、b、c的大小顺序是? 【解答】 粗览三个函数,h(x)2*sinXx的零点是最好解决的,明显x0时h(x)0,因此c在原点的位置; 对于f(x)2^xx&#xff…

css预编译器--sass

Sass Sass 提供了 变量(variables)、嵌套规则(nested rules)、 混合(mixins)、 函数(functions),目前我使用最多的还是变量和嵌套规则,貌似目前css也支持嵌套…

kafka发送消息流程

配置props.put(ProducerConfig.PARTITIONER_CLASS_CONFIG, RoundRobinPartitioner.class); public Map<String,Object> producerConfigs(){Map<String,Object> props new HashMap<>();props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrapServers…

代码随想录算法训练营Day36||动态规划part04

494.目标和&#xff1a;本题的方法主要用来解决------装满容量为x的背包&#xff0c;有几种方法。 可以先理解二维数组的思路&#xff1a;感觉b站一个评论写得很清晰&#xff0c;借用一下。 这题最难理解的地方在于如何初始化数组&#xff0c;为什么dp[0]1&#xff1b;我试图自…

【C++BFS】690. 员工的重要性

本文涉及知识点 CBFS算法 LeetCode690. 员工的重要性 你有一个保存员工信息的数据结构&#xff0c;它包含了员工唯一的 id &#xff0c;重要度和直系下属的 id 。 给定一个员工数组 employees&#xff0c;其中&#xff1a; employees[i].id 是第 i 个员工的 ID。 employees[…