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

系列文章目录

一、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.mzph.cn/bicheng/45282.shtml

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

相关文章

day29--452. 用最少数量的箭引爆气球+435. 无重叠区间+763.划分字母区间

一、452. 用最少数量的箭引爆气球 题目链接:https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/ 文章讲解:https://programmercarl.com/0452.%E7%94%A8%E6%9C%80%E5%B0%91%E6%95%B0%E9%87%8F%E7%9A%84%E7%AE%AD%E5%BC%95%E7%88…

整数的英语表示

题目链接 整数的英语表示 题目描述 注意点 0 < num < 2^31 - 1 解答思路 每三个数字形成一组&#xff08;高位不足的部分可以用0填充&#xff09;&#xff0c;使用StringBuilder拼接每组的数字和单位关键是三个数字的英语表示&#xff0c;包含个位、十位、百位&…

C++ | Leetcode C++题解之第229题多数元素II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> majorityElement(vector<int>& nums) {int n nums.size();vector<int> ans;unordered_map<int, int> cnt;for (auto & v : nums) {cnt[v];}for (auto & v : cnt…

搭建ELK+Filebead+zookeeper+kafka实验

目录 1.部署 Filebeat 2. Logstash配置 3.浏览器kibana访问验证 主机名ip地址主要软件es01192.168.9.114ElasticSearches02192.168.9.115ElasticSearches03192.168.9.116ElasticSearch、Kibananginx01192.168.9.113nginx、LogstashNA192.168.9.111nginx、FilebeatNA192.168…

YOLOv8改进 | 注意力机制| 对小目标友好的BiFormer【CVPR2023】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

告别中央服务器:Syncthing实现点对点文件同步

介绍 Syncthing 是一款开源的文件同步工具&#xff0c;可让您在多个设备之间同步文件。 它适用于 Mac OS X、Windows、Linux、FreeBSD、Solaris、OpenBSD等系统。 可以通过浏览器访问来配置和监控该应用程序。 Syncthing 具有以下特点: 1、点对点同步 2、无需中央服务器 …

推三返一,七星创客模式激活消费与分享热情

七星创客模式&#xff0c;作为一种创新的消费与营销融合策略&#xff0c;正悄然改变着传统商业生态的运作方式。其核心精髓“先消费后返利”&#xff0c;不仅颠覆了消费者的传统购物体验&#xff0c;还巧妙地在促进消费与激励分享之间搭建起了一座桥梁。这一模式通过随机返佣的…

【CT】LeetCode手撕—8. 字符串转换整数 (atoi)

目录 题目1- 思路2- 实现⭐8. 字符串转换整数 (atoi)——题解思路 3- ACM 实现 题目 原题连接&#xff1a;8. 字符串转换整数 (atoi) 1- 思路 思路 x 的平方根 ——> 利用二分 ——> 二分的 check条件为 k^2 < x 2- 实现 ⭐8. 字符串转换整数 (atoi)——题解思路 …

C++ enum class转常量

当使用 enum class 时&#xff0c;它具有更强的类型安全性和隔离性&#xff0c;因此需要显式转换才能访问其底层整数值。 std::underlying_type_t 是一个类型别名&#xff0c;它返回枚举类型的底层类型。 to_underlying 函数提供了一种方便的方式来执行这种转换&#xff0c;特别…

LLM——langchain 与阿里 DashScop (通义千问大模型) 和 DashVector(向量数据库) 结合使用总结

文章目录 前言预览直接调用大模型使用 prompt template格式化输出使用上下文 RAG 增强检索 自定义 langchain AgentPromptTemplate 和 ChatPromptTemplate使用少量示例创建ChatPromptTemplate 前言 langchain 是一个面向大模型开发的框架&#xff0c;其中封装了很多核心组件&a…

Java数据结构-链表与LinkedList

链表 链表的概念 链表是一种物理存储结构上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的。 通俗来说&#xff0c;相比较于顺序表&#xff08;物理上连续&#xff0c;逻辑上也连续&#xff09;&#xff0c;链表物理上不一定连续。 链表是…

代码随想录算法训练营第三十一天|动态规划:01背包理论基础、01背包理论基础(滚动数组)

动态规划&#xff1a;01背包理论基础 1. dp[i][j]: 表示0到i个物品放入容量为j的背包中&#xff0c;价值总和最大是多少 2. dp[i][j]的状态取决于&#xff0c;第i个物品要不要放入这个背包。 不放物品i&#xff1a;dp[i-1][j] (其实就是当物品i的重量大于背包j的重量时&…

2023年全国大学生电子信息竞赛E题——自动追踪系统(stm32和openmv+普通舵机)完美解决第四问

当时做的时候&#xff0c;当时看别人开源的23年的题&#xff0c;感觉一头雾水。两个字没思路。确实只有做了才会有思路。我这里清晰的整理出来思路。 1.第一问的复位问题就是写一个函数&#xff0c;如果按键按下&#xff0c;就进入&#xff0c;再按下就退出 当然这个复位是写死…

自学鸿蒙HarmonyOS的ArkTS语言<六>警告弹窗AlertDialog和列表选择弹窗ActionSheet

一、警告弹窗 ... Button(点击我可以获取一个警告弹窗).onClick(() > {AlertDialog.show({title: 我是弹窗标题,subtitle: 我是副标题,message: 我是弹窗内容,autoCancel: true, // 点击遮罩层是否关闭alignment: DialogAlignment.Center, // 弹窗位置offset: { dx: 0, dy:…

【ARMv8/v9 GIC 系列 5.8 -- SPI 中断路由到指定的 core 详细介绍】

请阅读【ARM GICv3/v4 实战学习 】 文章目录 SPI 中断路由配置寄存器字段代码示例Usage scenarioSPI 中断路由配置 在ARMv8和ARMv9架构下,当启用亲和性路由(Affinity Routing)时,系统寄存器GICD_IROUTER<n>用于提供具有INTID n的SPI的路由信息。n的最大值由公式(32*…

GAN生成对抗网络

GAN生成对抗网络 GANStable Diffusion GAN生成对抗网络子啊2015年横空出世&#xff0c;在当时掀起了巨大轰动&#xff0c;很多人预研它将开创一个全新的学习范式&#xff0c;当时有一个很流行的说法&#xff1a;样本不够&#xff0c;GAN来凑。现如今&#xff0c;大模型当道&…

网络编程!

网络编程 【1】网络开发架构 &#xff08; 1 &#xff09; C / S 架构 C : client &#xff08;客户端&#xff09; S: server (服务端) APP - 就是服务端 C/S 架构通过客户端软件和服务器之间的交互&#xff0c;实现了前端界面和后端业务逻辑的分离&#xff0c;提供了一种…

华为HCIP Datacom H12-821 卷35

单选题 通过display bgp routing-table命令输出的内容如图所示&#xff0c;那么以下关于该内容的描述&#xff0c;正确的是哪一项? A、去往192.168. 1. 0/24网段的路由的MED值是100 B、去往192.168.1. 0/24网段的路由是通过AS200学到的 C、去往192.168.1.0/24网段的路由是通…

<数据集>水稻叶片病害识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1448张 标注数量(xml文件个数)&#xff1a;1448 标注数量(txt文件个数)&#xff1a;1448 标注类别数&#xff1a;3 标注类别名称&#xff1a;[BrownSpot,RiceBlast,BacterialBlight] 序号类别名称图片数框数1Rice…

LLM代理应用实战:构建Plotly数据可视化代理

如果你尝试过像ChatGPT这样的LLM&#xff0c;就会知道它们几乎可以为任何语言或包生成代码。但是仅仅依靠LLM是有局限的。对于数据可视化的问题我们需要提供一下的内容 描述数据:模型本身并不知道数据集的细节&#xff0c;比如列名和行细节。手动提供这些信息可能很麻烦&#…