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

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...