当前位置: 首页 > news >正文

Yarn 资源调度器

Yarn 资源调度器:资源调度平台,负责为运算程序提供服务器运算资源

1 Yarn 基础架构

YARN 主要由 ResourceManager、NodeManager、ApplicationMaster 和 Container 等组件构成。

image-20221026214109516

image-20221026215211445

  1. MR 程序提交到客户端所在的节点。
  2. YarnRunner 向 ResourceManager 申请一个 Application。
  3. ResourceManager 将该应用程序的资源路径返回给 YarnRunner。
  4. 该程序将运行所需资源提交到 HDFS 上。
  5. 程序资源提交完毕后,申请运行 MRAppmaster
  6. ResourceManager 将用户的请求初始化成一个 Task。
  7. 其中一个 NodeManager 领取到 Task 任务。
  8. NodeManager 创建容器 Container,并产生 MRAppmaster
  9. Container 从 HDFS 上拷贝资源到本地。
  10. MRAppmaster 向 ResourceManager 申请运行 MapTask 资源
  11. ResourceManager 将运行 MapTask 任务分配给另外两个 NodeManager,另两个 NodeManager 分别领取任务并创建容器。
  12. MR 向两个接收到任务的 NodeManager 发送程序启动脚本,这两个 NodeManager分别启动 MapTask,MapTask 对数据分区排序。
  13. MRAppMaster 等待所有 MapTask 运行完毕后,向 ResourceManager 申请容器,运行ReduceTask
  14. ReduceTask 向 MapTask 获取相应分区的数据。
  15. 程序运行完毕后,MR 会向 RM 申请注销自己。

2 作业提交全过程

HDFS、YARN、MapReduce三者关系

image-20221026215502248

作业提交过程之YARN

image-20221026215211445

作业提交过程之HDFS & MapReduce

image-20221026215820384

  1. 作业提交
    第 1 步:Client 调用 job.waitForCompletion 方法,向整个集群提交 MapReduce 作业。
    第 2 步:Client 向 RM 申请一个作业 id。
    第 3 步:RM 给 Client 返回该 job 资源的提交路径和作业 id。
    第 4 步:Client 提交 jar 包、切片信息和配置文件到指定的资源提交路径。
    第 5 步:Client 提交完资源后,向 RM 申请运行 MrAppMaster。

  2. 作业初始化
    第 6 步:当 RM 收到 Client 的请求后,将该 job 添加到容量调度器中。
    第 7 步:某一个空闲的 NM 领取到该 Job。
    第 8 步:该 NM 创建 Container,并产生 MRAppmaster。
    第 9 步:下载 Client 提交的资源到本地。

  3. 任务分配
    第 10 步:MrAppMaster 向 RM 申请运行多个 MapTask 任务资源。
    第 11 步:RM 将运行 MapTask 任务分配给另外两个 NodeManager,另两个NodeManager分别领取任务并创建容器。

  4. 任务运行
    第 12 步:MR 向两个接收到任务的 NodeManager 发送程序启动脚本,这两个NodeManager 分别启动 MapTask,MapTask 对数据分区排序。
    第 13 步:MrAppMaster 等待所有 MapTask 运行完毕后,向 RM 申请容器,运行ReduceTask。
    第 14 步:ReduceTask 向 MapTask 获取相应分区的数据。
    第 15 步:程序运行完毕后,MR 会向 RM 申请注销自己。

  5. 进度和状态更新
    YARN 中的任务将其进度和状态返回给应用管理器,
    客户端每秒(通过mapreduce.client.progressmonitor.pollinterval 设置)向应用管理器请求进度更新, 展示给用户。

  6. 作业完成
    除了向应用管理器请求作业进度外,
    客户端每 5 秒都会通过调用 waitForCompletion()来检查作业是否完成。

    • 时间间隔可以通过 mapreduce.client.completion.pollinterval 来设置。

    作业完成之后, 应用管理器和 Container 会清理工作状态。

    • 作业的信息会被作业历史服务器存储以备之后用户核查。

3 Yarn 调度器和调度算法

  • Hadoop 作业调度器主要有三种:FIFO、容量(Capacity Scheduler)和公平(Fair Scheduler)
  • Apache Hadoop 3.3 默认的资源调度器是 Capacity Scheduler。
  • CDH 框架默认调度器是 Fair Scheduler。

3.1 先进先出调度器(FIFO)

image-20221026224758495

3.2 容量调度器(Capacity Scheduler)

image-20221026224836160

  1. 多队列:每个队列可配置一定的资源量,每个队列采用FIFO调度策略。
  2. 容量保证:管理员可为每个队列设置资源最低保证和资源使用上限
  3. 灵活性:
    • 如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列
    • 一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列。
  4. 多租户:支持多用户共享集群和多应用程序同时运行。
    • 为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。

容量调度器资源分配算法

image-20221027115151253

  • 队列资源分配

    从root开始,使用深度优先算法,优先选择资源占用率最低的队列分配资源。

  • 作业资源分配

    默认按照提交作业的优先级和提交时间顺序分配资源。

  • 容器资源分配

    按照容器的优先级分配资源;

    如果优先级相同,按照数据本地性原则:
    (1)任务和数据在同一节点
    (2)任务和数据在同一机架
    (3)任务和数据不在同一节点也不在同一机架

3.3 公平调度器(Fair Scheduler)

image-20221026225754444

  • 与容量调度器相同点
    • 多队列:支持多队列多作业
    • 容量保证:管理员可为每个队列设置资源最低保证和资源使用上线
    • 灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列。
    • 多租户:支持多用户共享集群和多应用程序同时运行;为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。
不同点公平调度器容量调度器
核心调度策略优先选择对资源的缺额比例大的优先选择资源利用率低的队列
资源分配方式每个队列可以单独设置资源分配方式
FIFO、FAIR、DRF
FIFO、DRF

image-20221026230116977

  • 公平调度器设计目标是:在时间尺度上,所有作业获得公平的资源。
  • 某一时刻一个作业应获资源和实际获取资源的差距叫“缺额”
  • 调度器会优先为缺额大的作业分配资源

公平调度器队列资源分配方式

  1. FIFO策略

    此时公平调度器相当于容量调度器。

  2. Fair策略

    Fair 策略(默认)是一种基于最大最小公平算法实现的资源多路复用方式。

    具体资源分配流程和容量调度器一致;
    (1)选择队列
    (2)选择作业
    (3)选择容器
    以上三步,每一步都是按照公平策略分配资源

    如果一个队列中有两个应用程序同时运行,则每个应用程序可得到1/2的资源;

    如果三个应用程序同时运行,则每个应用程序可得到1/3的资源。

image-20221027115041344

image-20221027115401208

公平调度器队列资源分配方式:DRF策略
在YARN中,我们用DRF(Dominant Resource Fairness)来决定如何调度资源:

假设集群一共有100 CPU和10T 内存
而应用A需要(2 CPU, 300GB),应用B需要(6 CPU,100GB)。
则两个应用分别需要A(2%CPU, 3%内存)和B(6%CPU, 1%内存)的资源
这就意味着A是内存主导的, B是CPU主导的
针对这种情况,我们可以选择DRF策略对不同应用进行不同资源(CPU和内存)的一个不同比例的限制。

5 Yarn 生产环境核心参数

  • ResourceManager相关

    yarn.resourcemanager.scheduler.class 配置调度器,默认容量

    yarn.resourcemanager.scheduler.client.thread-count ResourceManager处理调度器请求的线程数量

  • NodeManager相关

    • yarn.nodemanager.resource.detect-hardware-capabilities 是否让yarn自己检测硬件进行配置,默认false

      yarn.nodemanager.resource.count-logical-processors-as-cores 是否将虚拟核数当作CPU核数,默认false

      yarn.nodemanager.resource.pcores-vcores-multiplier 虚拟核数和物理核数乘数,例如:4核8线程参数就应设为2,默认0

    • yarn.nodemanager.resource.memory-mb NodeManager使用内存,默认8G

      yarn.nodemanager.resource.system-reserved-memory-mb NodeManager为系统保留多少内存

      以上二个参数配置一个即可

    • yarn.nodemanager.resource.cpu-vcores NodeManager使用CPU核数,默认8个

      yarn.nodemanager.pmem-check-enabled 是否开启物理内存检查限制container,默认打开

      yarn.nodemanager.vmem-check-enabled 是否开启虚拟内存检查限制container,默认打开

      yarn.nodemanager.vmem-pmem-ratio 虚拟内存物理内存比例,默认2.1

  • Container相关

    yarn.scheduler.minimum-allocation-mb 容器最最小内存,默认1G
    yarn.scheduler.maximum-allocation-mb 容器最最大内存,默认8G
    yarn.scheduler.minimum-allocation-vcores 容器最小CPU核数,默认1个
    pmem-ratio 虚拟内存物理内存比例,默认2.1

  • Container相关

    yarn.scheduler.minimum-allocation-mb 容器最最小内存,默认1G
    yarn.scheduler.maximum-allocation-mb 容器最最大内存,默认8G
    yarn.scheduler.minimum-allocation-vcores 容器最小CPU核数,默认1个
    yarn.scheduler.maximum-allocation-vcores 容器最大CPU核数,默认4个

相关文章:

Yarn 资源调度器

Yarn 资源调度器:资源调度平台,负责为运算程序提供服务器运算资源 1 Yarn 基础架构 YARN 主要由 ResourceManager、NodeManager、ApplicationMaster 和 Container 等组件构成。 MR 程序提交到客户端所在的节点。YarnRunner 向 ResourceManager 申请一个…...

通达信 34日上升三角形主图源码

请先看效果图。 以下是编程源码&#xff0c;可以参考学习一下&#xff1a; N:34;{三角背景} 趋势下:DRAWLINE(HHHV(H,N),H,LLLV(L,N),L,0),LINETHICK2,COLORMAGENTA; SX:REF(趋势下,1)<趋势下; SS:DRAWLINE(SX,趋势下,REF(SX,1),REF(趋势下,1),1); DRAWBAND(SS,RGB(0,0,16…...

CSDN周赛第37期题解(Python版)

这期周赛题目和测试集还算完整&#xff0c;没有出现往期的bug。1、题目名称&#xff1a;幼稚班作业幼稚园终于又有新的作业了。 老师安排同学用发给同学的4根木棒拼接成一个三角形。 当然按照正常的逻辑&#xff0c;如果不能拼接成三角形。 必然要折断某个木棍来拼接三角形。 可…...

程序调试方法

调试思路 程序中一定要尽可能的做容错处理&#xff0c;可能会出错的地方&#xff0c;增加打印日志&#xff0c;这样在出问题时候才能最快的定位问题&#xff0c;所以这个属于前置工作&#xff0c;前置做的越多越好&#xff0c;后期调试越省力&#xff0c;程序也更健壮。学会看…...

【Android入门到项目实战--2.3】—— 活动的四种启动模式(standard、singleTop、singleTask、singleInstance)

目录 一、活动的启动模式 1、standard 2、singleTop 3、singleTask 4、singleInstance 本篇文章主要讲解活动的生命周期和活动的启动模式。 一、活动的启动模式 活动的启动模式共有4种&#xff0c;分别是standard、singleTop、singleTask和singleInstance&#xff1b; 可…...

SpringCloud微服务技术栈.黑马跟学(三)

SpringCloud微服务技术栈.黑马跟学 三今日目标1.初识Docker1.1.什么是Docker1.1.1.应用部署的环境问题1.1.2.Docker解决依赖兼容问题1.1.3.Docker解决操作系统环境差异1.1.4.小结1.2.Docker和虚拟机的区别1.3.Docker架构1.3.1.镜像和容器1.3.2.DockerHub1.3.3.Docker架构1.3.4.…...

学习Java——集合类

目录 1.Collection和Collections区别 2.Set和List区别 3.ArrayList和LinkedList和Vector的区别 4.Set如何保证元素不重复 5.Arrays.asList获得的List使用时需要注意什么 1.Collection和Collections区别 Collection 是一个集合接口。 它提供了对集合对象进行基本操作的通用…...

[前端笔记035]vue2之脚手架vue-cli

前言 本笔记参考视频&#xff0c;尚硅谷:BV1Zy4y1K7SH p61 - p95 简介 Vue 脚手架是 Vue 官方提供的标准化开发工具&#xff0c;vue-cli使用步骤 如果下载缓慢请配置 npm 淘宝镜像&#xff1a;npm config set registry http://registry.npm.taobao.org全局安装vue/cli&#…...

《Linux的权限》

本文主要对linux的一些基本权限进行讲解 文章目录前言Linux权限&#xff08;1&#xff09;权限的概念&#xff08;2&#xff09;linux下用户分类(root,普通)(3)linux的文件属性文件属性的分类文件权限修改文件权限1、chmod2、chown和chgrp3、fiile权限的三个重要的问题第一个问…...

js类型转换

类型转换 1.字符串转换 字符串转换在原来值的基础上加上 "" let num 1 num String(num) // "1"String(false) // "false"2.数字转换 在算数函数和表达式中&#xff0c;会自动进行数字转换。其自动完成的数字转换为隐式转换&#xff0c;也可…...

PostMan工具的使用

PostMan工具的使用 1 PostMan简介 代码编写完后&#xff0c;我们要想测试&#xff0c;只需要打开浏览器直接输入地址发送请求即可。发送的是GET请求可以直接使用浏览器&#xff0c;但是如果要发送的是POST请求呢? 如果要求发送的是post请求&#xff0c;我们就得准备页面在页…...

Sentinel 授权规则规则持久化

本篇博客我们来学习授权规则&#xff0c;授权规则是对请求者的一种身份的判断。 1、授权规则 授权规则是对请求者的身份做一个判断。你有没有权限来访问我&#xff1f;那就有人可能会说这个功能&#xff0c;好像以前我们在学习微服务的时候讲过网关他不就是把门的吗&#xff1…...

C#大型HIS医院LIS管理系统源码

▶ 一、实验室信息管理系统&#xff08;LIS&#xff09;是什么&#xff1f; 实验室信息管理系统也就是平时所说的LIS&#xff08;Laboratory Information System&#xff09;系统&#xff0c;其主要服务的对象主要是医院检验科工作人员&#xff0c;也是医院信息化建设必…...

Java基础学习(5)

Java基础学习一 面向对象1.1 介绍对象1.2 设计对象并使用1.2.1定义类的补充注意事项1.3 封装好处:1.3 private关键字1.4 this关键字1.5 构造方法构造方法的注意事项:1.6 标准的JavaBean1.7 对象内存图1.7.1 一个对象的内存图1.7.2 两个对象内存图1.7.两个引用指向同一个对象1.8…...

SpringBoot接口 - 如何生成接口文档之Swagger技术栈

SpringBoot开发Restful接口&#xff0c;有什么API规范吗&#xff1f;如何快速生成API文档呢&#xff1f;Swagger 是一个用于生成、描述和调用 RESTful 接口的 Web 服务。通俗的来讲&#xff0c;Swagger 就是将项目中所有&#xff08;想要暴露的&#xff09;接口展现在页面上&am…...

JavaScript execCommand函数

execCommand函数命令execCommand方法是执行一个对当前文档&#xff0c;当前选择或者给出范围的命令。处理Html数据时常用如下格式&#xff1a;document.execCommand(sCommand[,交互方式, 动态参数]) &#xff0c;其中&#xff1a;sCommand为指令参数&#xff08;如下例中的”2D…...

2023年安徽省中职网络安全跨站脚本攻击

B-4&#xff1a;跨站脚本攻击 任务环境说明&#xff1a; √ 服务器场景&#xff1a;Server2125&#xff08;关闭链接&#xff09; √ 服务器场景操作系统&#xff1a;未知 √ 用户名:未知 密码&#xff1a;未知 1.访问服务器网站目录1&#xff0c;根据页面信息完成条件&am…...

Jmeter之常用断言总结篇

在使用Jmeter进行性能测试或者接口自动化测试工作中&#xff0c;经常会用到的一个功能&#xff0c;就是断言。断言是在请求的返回层面增加一层判断机制&#xff0c;因为请求成功了&#xff0c;并不代表结果一定正确&#xff0c;因此需要判断机制提高测试准确性。本文主要介绍6种…...

Elasticsearch:如何在 Elastic 中实现图片相似度搜索

作者&#xff1a;Radovan Ondas 在本文章&#xff0c;我们将了解如何通过几个步骤在 Elastic 中实施相似图像搜索。 开始设置应用程序环境&#xff0c;然后导入 NLP 模型&#xff0c;最后完成为你的图像集生成嵌入。 Elastic 图像相似性搜索概览 >> 如何设置环境 第一步…...

一起Talk Android吧(第五百二十三回:获取位置信息经验总结)

文章目录 整体概述位置权限与蓝牙权限综合使用特殊机型的使用方法官方建议各位看官们大家好,上一回中咱们说的例子是"如何有效地获取位置权限",这一回中咱们说的例子是" 获取位置信息经验总结"。闲话休提,言归正转, 让我们一起Talk Android吧! 整体概…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...