分布式场景下,Apache YARN、Google Kubernetes 如何解决资源管理问题?
所有的资源管理系统都需要解决资源的有效利用、任务的有效响应、调度策略的灵活配置这三个最基本问题。那么在分布式的场景下,YARN和Kubernetes是怎么解决的呢?本篇进行介绍。

— Apache YARN —
YARN全称为(Yet Another Resource Negotiator),是一个集群共享的调度框架,有良好的可伸缩性,以及调度器本身有非常高的可靠性。YARN的架构如下图所示,其中ResourceManager控制整个集群,并管理应用程序对基础计算资源的分配。它将各个资源部分(计算、内存、带宽等)安排给基础NodeManager(YARN 的每节点代理)。ResourceManager还与 Application Master一起分配资源,与NodeManager一起启动和监视它们的基础应用程序。在此上下文中,Application Master承担了以前的TaskTracker的一些职责,ResourceManager承担了 JobTracker 的角色。

Application Master管理一个在YARN内运行的应用程序的每个实例,并负责协调来ResourceManager的资源,并通过 NodeManager监视容器的执行和资源使用(CPU、内存等的资源分配)。从YARN 角度讲,Application Master 是用户代码,因此存在潜在的安全问题。NodeManager管理一个YARN集群中的每个节点。NodeManager提供针对集群中每个节点的服务,从监督对一个容器的终生管理到监视资源和跟踪节点健康。NodeManager管理抽象容器,这些容器代表着可供一个特定应用程序使用的针对每个节点的资源。Container是YARN中资源的抽象,封装了某节点上一定量的资源(内存,CPU),Container的运行由Application Master向资源所在的NodeManager发起。
一个MapReduce Job的调度过程如下图所示,一般会包含提交Job、启动Application Master、请求资源需求、通过后通过Container来进行数据处理这四步。这个流程也同样适用于Spark、Flink等计算引擎。通过YARN的这套资源管理体系,所有的中短期的计算任务都可以有效的得到统一的管理与调度。

调度能力是YARN的核心能力,YARN社区一共提供了FIFO、Fair和Capacity三种调度模型,用户也可以继承ResourceScheduler的接口实现自定义的调度器。FIFO Scheduler顾名思义是最简单的调度器,提交的作业按照提交时间先后顺序或者根据优先级次序将其放入线性队列相应的位置,在资源调度时,按照队列的先后顺序、先进先出地进行调度和资源分配。这种调度器过于简单,在实际的生产中,应用不是很多,毕竟需要调度的作业是有不同的优先级的。
在一些多用户的场景下,如大型集团每天夜间通过不同用户运行不同应用需要的批处理数据加工任务,应用的数量可能是数十个之多,集群资源在用户之间分配的公平性就比较重要。为了应对多租户的需求,社区推出了Capacity Scheduler,让不同的组织使用各自的资源,相互之间不影响,同时提高整个集群的利用率和吞吐量。Capacity Scheduler将资源分为多个队列,每个队列分配一部分资源,不同组织或用户的应用运行在其各自的队列中,从而做到资源隔离。在一个情况允许的情况下,为了提升集群吞吐,也允许队列之间的资源抢占。

Fair Scheduler将资源划分到多个资源池中,每个资源池设定资源分配最低保障和最高上限,管理员也可以指定资源池的优先级,优先级高的资源池将会被分配更多的资源,当一个资源池有剩余时,可以临时将剩余资源共享给其他资源池。Fair Scheduler先将用户的任务挂载到如下图的树形队列的叶子节点上,等待后续的资源调度。每个调度周期开始后,Scheduler选择集群中的一个节点,从树形队列的根节点出发,每层队列都按照按照作业的优先级或者根据公平策略来选择一个子队列,最后在叶子节点上按照公平策略来选择一个App,然后为这个App在对应的节点上分配适配的资源从而开始计算任务。

为了更好的支持生产需求,Fair Scheduler还支持抢占式调度,如果某个资源池长时间未能分配到公平共享量的资源,调度器则会杀死过多分配资源的资源池的任务,以腾出资源并分配到这个资源池中供对应的任务调度。此外,它还提供了一个基于任务数目的负载均衡机制,从而将系统任务尽可能均衡的分配到各个节点上。
— Google Kubernetes —
Kubernetes是Google的开源项目,用来管理Docker集群, 继承了Borg的优点,实现了编排、部署、运行以及管理容器应用,下图是Kubernetes的总体架构。Kubernetes提供资源池化管理,可以将整个集群内的CPU、GPU、内存、网络和硬盘等资源抽象为一个资源池,可以根据应用的资源需求灵活的根据资源池中的实时资源情况进行调度;Kubernetes包含一个统一的调度框架,可以管理最多数千个服务器和数万个容器,同时提供插件化的接口让第三方来定制和扩展新的调度系统;此外Kubernetes支持通过ConfigMap等方式来动态的调整应用配置,从而具备动态调配的基础能力。我们将基于这些基础技术来开发支持复杂应用平台的调度系统。

关于Kubernetes的详细介绍,可以查看往期文章:Docker和Kubernetes的前世今生(下)
— 小结—
本篇介绍了两个分布式资源管理技术YARN和Kubernetes。开源社区从2018年开始,多个项目如Spark、Flink、Tensorflow等都开始从YARN转向基于Kubernetes的管理和调度。长期上看,作为Hadoop集群的资源管理系统,YARN非常有效的完成了其技术价值,但受限于其架构设计,很难往一个通用的数据中心调度系统演进。星环科技在2017年已经实现内部大数据平台从YARN切换到Kubernetes,下一篇将从存储、计算、资源调度等方面介绍星环大数据技术体系。
相关文章:
分布式场景下,Apache YARN、Google Kubernetes 如何解决资源管理问题?
所有的资源管理系统都需要解决资源的有效利用、任务的有效响应、调度策略的灵活配置这三个最基本问题。那么在分布式的场景下,YARN和Kubernetes是怎么解决的呢?本篇进行介绍。 — Apache YARN — YARN全称为(Yet Another Resource Negotiato…...
RK3399平台开发系列讲解(基础篇)POSIX 定时器
🚀返回专栏总目录 文章目录 一、clockid二、sigevent三、timerid四、flags五、 value & old_value六、POSIX 定时器的优势沉淀、分享、成长,让自己和他人都能有所收获!😄 📢为了克服传统定时器的局限性,POSIX 标准组织设计了新的计时器接口和规范,使它们能提供更…...
web小游戏开发:扫雷(三)(完成度90%)
web小游戏开发:扫雷(三) 实现布雷鼠标事件处理左键和右键单独实现实现递归展开追加地雷计数和时间计时小结书接前文啊,如果没看过前两篇的话,不好理解这里的定义了哦。 实现布雷 在之前两篇文章,我们已经把雷区布置好了,全部盖上了格子,现在我们需要把雷布出来,这就需…...
创建菜单栏、菜单、菜单项
1、QMainWindow窗口 1.1、创建菜单栏 this 代表的是 当前窗口(主窗口),也就是 当前窗口中添加/设置 菜单栏 this->resize(800,600); //创建 菜单栏 QMenuBar *menuBar new QMenuBar(this); //将菜单栏 添加到主窗口的特殊位置 this-&g…...
专访丨AWS量子网络中心科学家Antía Lamas谈量子计算
Anta Lamas Linares(图片来源:网络) 47岁的Anta Lamas Linares出生于西班牙西北部的圣地亚哥德孔波斯特拉。她在当地学习物理学,然后在牛津大学和加利福尼亚继续深造。后来,她在新加坡领导了亚马逊网络服务…...
[ 云计算 | Azure ] Chapter 04 | 核心体系结构之数据中心、区域与区域对、可用区和地理区域
本章节主要内容进行讲解:Azure云计算的核心体系结构组件中的:Azure物理基础设施(Physical infrastructure),区域(Regions)和区域对(Region Pairs)、地理数据中心…...
升级长江存储最新闪存,忆恒创源发布新一代企业级NVMe SSD
2023年4月11日 —— 北京忆恒创源科技股份有限公司(Memblaze)正式发布搭载高品质国产闪存的PBlaze6 6541 系列企业级PCIe 4.0 NVMe SSD。作为 MUFP 平台化开发的最新作品,PBlaze6 6541 采用长江存储最新一代晶栈 Xtacking 3D NAND,…...
Xcode14:”Failed to prepare the device for development“解决
当前Xcode版本14.2,测试机iOS版本16.4, 结果出现提示:Failed to prepare the device for development,经过Clean,重装都无效,最后发现其他人也有类似的问题 https://developer.apple.com/forums/thread/714388 PS:首先…...
程序员的“灵魂笔记本“:五款高效笔记软件推荐
大家好,我是 jonssonyan。作为一名程序员,我们经常需要记录和整理大量的代码、知识和项目信息,以便在日后能够高效地进行查阅和复用。而好用的笔记软件则成为了我们的"灵魂笔记本",帮助我们提高工作效率。在这篇文章中&…...
Linux基础命令-scp远程复制文件
Linux基础命令-seq打印数字序列 前言 有时候不可避免的需要将文件复制到另外一台服务器上,那么这时就可以使用scp命令远程拷贝文件,scp命令是基于SSH协议,在复制的过程中数据都是加密过的,会比明文传输更为安全。 一.命令介绍 …...
【python学习】基础篇-列表元素排序操作 sort()、min()、max()函数
列表对象中提供了 sort0 方法,该方法用于对原列表中的元素进行排序,排序后原列表中的元素顺序将发生改变。 其语法格式如下: listname.sort(keyNone, reverseFalse) key:用于比较的键 reverse:可选参数,Fal…...
机器视觉检测系统的基本流程你知道吗
工业制造业种,首先我们便需要了解其基本流程,作为工厂信息科人员,我们不能只依靠视觉服务商的巡检驻检来解决问题,为了产线的效率提升,我们更多的应该培养产线技术人员,出现问题便可以最快速度解决问题&…...
【vue】Vue 开发技巧:
文章目录1.路由参数解耦2.功能组件3.样式范围4.watch的高级使用5.watch监听多个变量6.事件参数$event7.程序化事件监听器8.监听组件生命周期1.路由参数解耦 通常在组件中使用路由参数,大多数人会做以下事情。 export default {methods: {getParamsId() {return th…...
Kubebuilder Hello World
Kubebuilder Hello World 摘要:从0开始建立kubebuilder第一个程序 文章目录Kubebuilder Hello World0. 环境 简介0.1 环境0.2 什么是kubebuilder?1. 安装Kubebuilder1.1 需要预先准备好的环境1.2 安装kubebuilder & kustomize2. 项目初始化2.1 新建…...
SpringSecurity之权限方案——用户认证
目录 前言 设置用户名密码 1、通过配置文件设置用户名密码 2、编写代码实现接口 放行登录页面以及静态资源 前言 前面我们讲解了一些关于Security的基础知识及基本原理。我们今天看一下如何通过他实现一个简单的web权限认证方案! 设置用户名密码 1、通过配置…...
本地电脑轻松部署GPT4(无需账号)!
最近有个超级好玩的Github开源代码分享给大家,可以实现直接在本地电脑上运行GPT4,实现给机器人对话,获得想要的内容,亲测好用!废话不多说,直接上干货! 目录 一、Github项目地址 二、操作步骤 2.1 下载代码 2.2 操作方法 2.3 详细步骤...
每天一道大厂SQL题【Day21】华泰证券真题实战(三)
每天一道大厂SQL题【Day21】华泰证券真题实战(三) 大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题&…...
腾讯云8核16G18M轻量服务器CPU带宽流量性能测评
腾讯云轻量应用服务器8核16G18M带宽,18M公网带宽下载速度峰值可达2304KB/秒,相当于2.25M/s,系统盘为270GB SSD盘,3500GB月流量,折合每天116GB流量。腾讯云百科分享腾讯云轻量服务器8核16G18M配置、CPU型号、公网带宽月…...
算法之归并排序
文章目录一、归并排序(递归版)二、归并排序(非递归版)一、归并排序(递归版) 归并排序思想:将数组划分为两个区间,左区间,右区间 然后对这两个区间内容进行排序 ÿ…...
Mysql日志系统-mysql serve层
Mysql日志系统-服务层的日志 mysql给我们提供了很多有用的日志有mysql服务层提供的,有innodb引擎层提供的,下表是mysql服务层给我们提供的: 日志类型写入日志的信息二进制日志记录了对MySQL数据库执行更改的所有操作慢查询日志记录所有执行…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...
基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...
13.10 LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析
LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析 LanguageMentor 对话式训练系统架构与实现 关键词:多轮对话系统设计、场景化提示工程、情感识别优化、LangGraph 状态管理、Ollama 私有化部署 1. 对话训练系统技术架构 采用四层架构实现高扩展性的对话训练…...
Qt的学习(二)
1. 创建Hello Word 两种方式,实现helloworld: 1.通过图形化的方式,在界面上创建出一个控件,显示helloworld 2.通过纯代码的方式,通过编写代码,在界面上创建控件, 显示hello world; …...
CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)
漏洞概述 漏洞名称:Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号:CVE-2023-25194 CVSS评分:8.8 影响版本:Apache Kafka 2.3.0 - 3.3.2 修复版本:≥ 3.4.0 漏洞类型:反序列化导致的远程代…...
高保真组件库:开关
一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...
