分布式场景下,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数据库执行更改的所有操作慢查询日志记录所有执行…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...