当前位置: 首页 > 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吧! 整体概…...

发光立方体效果 html+css

一.话不多&#xff0c;看效果 css简单创意特效&#xff0c;关注我看更多简单创意特效~ 二.实现&#xff08;附完整代码&#xff09; 定义标签&#xff1a; <div class"container"><div class"q1"></div><div class"h2"&…...

READ: Large-Scale Neural Scene Rendering for Autonomous Driving

READ: Large-Scale Neural Scene Rendering for Autonomous Driving &#xff1a;面向自动驾驶的大规模神经场景绘制 门卷积 https://www.jianshu.com/p/09fc8490104d https://blog.csdn.net/weixin_44996354/article/details/117409438摘要&#xff1a;论文提出了一种大规模神…...

Linux环境C语言开发基础

C语言是一门面向过程的计算机编程语言&#xff0c;与C、C#、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言诞生于美国的贝尔实验室&#xff0c;由丹…...

string类(上)

string类&#xff08;上&#xff09;1.标准库中的string类2.string类对象的常见构造①string()②string(const char* s)③string(size_t n,char c)④string(const string&s)⑤string(const string& str,size_t pos,size_t lennpos)⑥string&#xff08;const char* s,s…...

ElasticSearch快速入门详解(亲测好用,强烈推荐收藏)

3.快速入门 接下来快速看下elasticsearch的使用 3.1.概念 Elasticsearch虽然是一种NoSql库&#xff0c;但最终的目的是存储数据、检索数据。因此很多概念与MySQL类似的。 ES中的概念数据库概念说明索引库&#xff08;indices)数据库&#xff08;Database&#xff09;ES中可…...

出入了解——Vue.js

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。座右铭&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石&#xff0c;故能成其高。个人主页&#xff1a;小李会科技的…...

MySQL8 双主(主主)架构部署实战

前言 大家好&#xff0c;我是 沐风晓月 本文收录于《数据库入门到精通系列》专栏&#xff0c; 更多内容可以关注我的csdn博客。 本文主要讲解MySQL主主架构实战,在开始之前需要根据下面的提示来配置环境&#xff1a; Linux基础命令不熟参考&#xff1a; 《linux基本功-基础…...

【数据结构】第三站:单链表

目录 一、顺序表的缺陷 二、链表 1.链表的概念以及结构 2.链表的分类 3.单链表的逻辑结构与物理结构 三、单链表的实现 1.单链表的定义 2.单链表的接口定义 3.单链表的接口实现 四、单链表的实现完整代码 一、顺序表的缺陷 在上一篇文章中&#xff0c;我们了解了顺序…...

【蓝桥杯2020】七段码

【题目描述】 七段码 HUSTOJ 题目导出文件 [蓝桥杯2020] 第十一届蓝桥杯第二次省赛—填空题E题 七段码 小蓝要用七段码数码管来表示一种特殊的文字。 上图给出了七段码数码管的一个图示&#xff0c;数码管中一共有 7 段可以发光的二 极管&#xff0c;分别标记为 a, b, c,…...

Spark读取JDBC调优

Spark读取JDBC调优&#xff0c;如何调参一、场景构建二、参数设置1.灵活运用分区列实际问题&#xff1a;工作中需要读取一个存放了三四年历史数据的pg数仓表&#xff08;缺少主键id&#xff09;&#xff0c;需要将数据同步到阿里云 MC中&#xff0c;Spark在使用JDBC读取关系型数…...