Koordinator 支持 K8s 与 YARN 混部,小红书在离线混部实践分享

作者:索增增(小红书)、宋泽辉(小红书)、张佐玮(阿里云)

背景介绍

Koordinator 是一个开源项目,基于阿里巴巴在容器调度领域多年累积的经验孵化诞生,目前已经支持了 K8s 生态内的在离线混部,然而在 K8s 生态外,仍有相当数量的用户会将大数据任务运行在 Apache Hadoop YARN [ 1] 这类资源管理系统中。虽然目前一些计算引擎提供了 K8s operator,将任务接入到了 K8s 生态,但不可否认的是,目前 YARN 生态依然保持一定的活跃度,典型的例子是包括阿里云在内的一系列主流云厂商仍然提供类似 E-MapReduce [ 2] 的产品,支持用户将大数据作业提交到 YARN 上运行,这点从产品的受欢迎程度上可见一斑。

小红书是 Koordinator 社区的活跃成员,为了进一步丰富 Koordinator 支持的在离线混部场景,社区会同来自阿里云、小红书、蚂蚁金服的开发者们共同启动了 Hadoop YARN 与 K8s 混部项目,支持将超卖的 Batch 资源提供给 Hadoop YARN 使用,进一步提升集群资源的使用效率,该项目目前已经在小红书生产环境正式投入使用。

技术原理

总体原则

在此之前,业界已经有关于 K8s 与 YARN 混部的一些内部实践,不过受限于落地场景,大部分的实现方式都对 YARN 系统本身做了相当多的侵入式改造,在运维和迭代上对普通用户来说不够友好。为了让更多用户享受到社区的开源技术红利,Koordinator 的设计将遵循以下几个原则。

  • 离线作业的提交入口依然为 YARN 保持不变。
  • 基于 Hadoop YARN 开源版本,原则上不对 YARN 做侵入式改造。
  • Koordinator 提供的混部资源,既可被 K8s Pod 使用,也可被 YARN task 使用,不同类型的离线应用可在同一节点内共存。
  • 单机 QoS 策略由 Koordlet 统一管理,并兼容 YARN task 的运行时。

方案设计

图片

ResourceManager 和 NodeManger 是 YARN 的核心组件,ResourceManager 在管控侧负责接收任务以及资源调度,NodeManager 负责任务的生命周期管理。在 YARN & K8s 混部场景下,RM 将仍然作为 YARN 集群的核心组件独立部署,NM 将以容器的形式部署。

Koordinator 新增了 koord-yarn-operator 模块,负责将 Batch 资源量同步给 YARN RM。为了对资源进行更精细的管理,YARN task 将与 NM 的资源管理相互独立,NM 在部署时只需按自身开销申请 Batch 混部资源。YARN 任务的资源使用通过 cgroup 来管理(LinuxContainerExecutor 模式),将 cgroup 路径在 besteffort Pod QoS 下,确保可以和其他 K8s Pod 一样,统一在 besteffort 分组下管理。

koodlet 目前在单机支持了一系列的 QoS 策略,这些同样需要针对 YARN 场景进行适配。对于资源隔离参数,例如 Group Identity,Memory QoS,L3 Cache 隔离等,koordlet 将根据设计的 cgroup 层级进行适配。而对于驱逐和压制这类动态策略,koordlet 将新增一个 sidecar 模块 koord-yarn-copilot,用于对接 YARN 场景的各类数据和操作,包括 YARN task 元信息采集、资源指标采集、task 驱逐操作等,所有 QoS 策略仍然保留在 koordlet 内,koordlet 内部相关模块将以 plugin 形式对接 koord-yarn-copilot 接口。同时,koord-yarn-copilot 的接口设计将保留一定的扩展性,后续可用于对接其他资源框架。

更多有关 YARN & K8s 混部的详细设计,可参考社区设计文档 [ 3]

小红书在离线混部实践

业务背景

在降本增效的大背景下,小红书内部商业化,社区搜索等业务存在大量的算法类 Spark 任务因为离线集群资源紧张导致任务堆积,不能得到及时处理,同时在线集群在业务低峰时段资源使用率较低;另一方面,相当占比的 Spark 任务资源调度仍旧运行在 YARN 调度器上;基于此现状,结合小红书在在离线混部方面的既有能力,通过打通 K8s 调度器与 YARN 调度器之间的资源视图,并在单机侧支持了 YARN task 粒度的驱逐与 QoS 保障策略,最终实现了在维持离线业务提交入口和使用习惯不发生任何改变的前提下,让大量的 Spark 任务稳定运行在在线闲时资源上,有效提升在线集群资源利用率的同时,大大缓解业务资源压力,并且有效降低业务离线资源使用成本。

在小红书的实践经验中,有以下几个关键技术点值得分享:

  • 针对 local shuffle 带来的磁盘性能瓶颈问题, 我们通过 RemoteShuffleService 技术手段降低本地磁盘 IO 开销,提升 IO 性能,有效提升离线业务运行效率与稳定性,另一方面,也能有效规避离线对在线在 IO 层面的干扰问题。
  • 小红书参与在离线混部的业务场景复杂,除了大数据 Spark 场景以外,还有转码,离线推理,训练等其他业务场景,为了确保高优 Spark 任务运行时稳定性,我们在 YARN 资源同步,单机的驱逐策略,QoS 保障策略等方面,都做了细粒度的优先级区分和策略优化,例如:离线资源超量上报(为了压榨资源,提高利用率),单机冲突处理,资源冲突或者离线资源满足度过低优先驱逐转码等时效性要求不高的离线,离线差异化 QoS 保障策略等。综合以上优化手段,最终实现了 Spark 任务的稳定高效运行和资源的充分利用。

落地收益

截止目前,小红书在离线混部方案已大规模落地,取得了以下业务结果:

  • 覆盖数万台在线集群节点,为离线业务稳定提供数十万核的计算资源
  • 离线任务驱逐率低于 1%,作业混部后基本不受影响
  • 混部集群 CPU 利用率平均增长 8% ~ 10%,部分均值 CPU 利用率能达到 45% 以上,大幅提升了集群资源使用效率

随着增量业务场景的不断接入,上述收益规模还在持续增长。

如何使用

支持 K8s 与 YARN 混部的相关功能目前已经基本研发完成,Koordinator 团队目前正努力完成发布前的一系列准备工作,敬请期待!

如果您也有意参与项目的合作共建,或是对 K8s & YARN 混部感兴趣,欢迎您到社区专项讨论区 [ 4] 下方留言,我们将第一时间联系您。参考留言格式:

联系人(gihub-id/e-mail):, e.g. @koordinator-dev

您任职/就读/参与的公司/学校/组织名称:e.g. koordinator community

社区参与意向:e.g. 希望能够参与研发/学习大数据&云原生混部/将 K8s&YARN 混部功能在生产环境落地/其它。

您对 “K8s&YARN混部” 的期待:

相关链接:

[1] Apache Hadoop YARN

https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html

[2] E-MapReduce

https://www.aliyun.com/product/bigdata/emapreduce

[3] 设计文档

https://koordinator.sh/zh-Hans/docs/next/best-practices/colocation-of-hadoop-yarn/

[4] 专项讨论区

https://github.com/koordinator-sh/koordinator/discussions/1297

点击此处,即可查看 Koordinator 的详细介绍和使用方法!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/240659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】线段树算法总结(单点修改)

知识概览 用作单点修改的线段树有4个操作: pushup:由子节点的信息计算父节点的信息build:初始化一棵树modify:修改一个区间query:查询一个区间 线段树用一维数组来存储: 编号是x的节点,它的父节…

Redis vs Memcached 哪一个更适合你的应用程序?

介绍 Redis和Memcached都是流行的内存缓存解决方案。它们都可以提高应用程序的性能,但它们之间有一些重要的区别。在本文中,我们将比较Redis和Memcached,并讨论哪一个更适合你的应用程序。 Redis Redis是一个开源的内存数据结构存储系统。…

hive中array相关函数总结

目录 hive官方函数解释示例实战 hive官方函数解释 hive官网函数大全地址: hive官网函数大全地址 Return TypeNameDescriptionarrayarray(value1, value2, …)Creates an array with the given elements.booleanarray_contains(Array, value)Returns TRUE if the a…

【MySQL工具】pt-online-schema-change源码分析

通过阅读源码 更加深入了解原理,以及如何进行全量数据同步,如何使用触发器来同步变更期间的原表的数据更改。(^-^)V 目录 源码分析 Get configuration information. Connect to MySQL. Create --plugin. Setup la…

使用 ElementUI 组件构建无边框 Window 桌面应用(WinForm/WPF)

生活不可能像你想象得那么好,但也不会像你想象得那么糟。 我觉得人的脆弱和坚强都超乎自己的想象。 有时,我可能脆弱得一句话就泪流满面;有时,也发现自己咬着牙走了很长的路。 ——莫泊桑 《一生》 一、技术栈 Vite + Vue3 + TS + ElementUI(plus) + .NET Framework 4.7.2…

166. 数独(DFS之剪枝与优化:位运算优化,优化搜索顺序,.可行性剪枝)

166. 数独 - AcWing题库 数独 是一种传统益智游戏,你需要把一个99 的数独补充完整,使得数独中每行、每列、每个 33 的九宫格内数字 1∼9 均恰好出现一次。 请编写一个程序填写数独。 输入格式 输入包含多组测试用例。 每个测试用例占一行&#xff0…

[管理者与领导者-129]:很多人对高情商的误解,工程师要扩展自己的情商吗?工程师如何扩展自己的情商?

目录 前言: 一、什么是高情商? 1.1 什么是高情商 1.2 情商的五大能力 1.3 高情商的层次 1.4 对高情商的误解? 二、工程师需要发展自己的高情商吗? 三、工程师如何扩展自己的情商? 四、什么样的“高情商”的管理者令人讨…

ZZ014城市轨道交通运营与维护赛题第7套

ZZ014城市轨道交通运营与维护赛题第7套 模块1赛题 模块序号 模块1 对应赛项编号 ZZ014 模块名称 城市轨道交通运营服务 子任务数量 12 竞赛时间 60分钟 任务描述 行车组织作业、票务设备故障处置以及突发事件应急处理 职业要素 R基本专业素养 R专业实践技能 R协…

.a库介绍和编译案例

.a库的介绍 库的名字一般是libxxxx.a,利用静态函数库编译成的文件比较大,是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件,对应的链接方式为静态链接。静态库的代码在编译时链接到应用程序中,因…

基于Mybatis-Plus进行查询封装

基于Mybatis-Plus进行查询封装 package com.test.common.orm.builder;import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.cache.Cache; import org.apache.ibatis.cache.impl.PerpetualCach…

前端 JS 安全对抗原理与实践

作者:vivo 互联网安全团队- Luo Bingsong 前端代码都是公开的,为了提高代码的破解成本、保证JS代码里的一些重要逻辑不被居心叵测的人利用,需要使用一些加密和混淆的防护手段。 一、概念解析 1.1 什么是接口加密 如今这个时代,…

高德地图逆地理编码踩坑日志

本人是一枚Java小白,公司项目中用到根据经纬度反查该地址中文信息的场景,因为一开始调用的经纬度是能反查出区域编码的,以为towncode都是String返回结果,如下图: 没想到当没有名字任何一个城市区域的时候,…

管理 Jenkins 详细指南

目录 系统配置 安全 状态信息 故障 排除 工具和操作 系统配置 系统,配置全局设置和路径,端口更改,下载地址等。 工具,配置工具、其位置和自动安装程序。 插件,添加、删除、禁用或启用可以扩展 Jenkins 功能的插…

华为OD机试 - 精准核酸检测(Java JS Python C)

题目描述 为了达到新冠疫情精准防控的需要,为了避免全员核酸检测带来的浪费,需要精准圈定可能被感染的人群。 现在根据传染病流调以及大数据分析,得到了每个人之间在时间、空间上是否存在轨迹交叉。 现在给定一组确诊人员编号(X1,X2,X3,...,Xn),在所有人当中,找出哪些…

ssh远程管理服务

什么是ssh SSH是一种加密的网络协议,用于在不安全的网络中安全地传输数据。它允许用户通过一个安全的通道连接到远程计算机,并在该通道上执行各种网络服务,例如远程登录和文件传输。 SSH使用公钥加密技术来验证远程计算机的身份,并…

初识Stable Diffusion

界面选项解读 这是在趋动云上部署的Stable Diffusion txt2img prompt (1)分割符号:使用逗号 , 用于分割词缀,且有一定权重排序功能,逗号前权重高,逗号后权重低 (2)建议的通用范式…

【C++11特性篇】玩转C++11中的包装器(function&bind)

前言 大家好吖,欢迎来到 YY 滴C系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! 目录 一.为什么需要包装器function&#xff…

【Earth Engine】协同Sentinel-1/2使用随机森林回归实现高分辨率相对财富(贫困)制图

目录 1 简介与摘要2 思路3 效果预览4 代码思路5 完整代码6 后记 1 简介与摘要 最近在做一些课题,需要使用Sentinel-1/2进行机器学习制图。 然后想着总结一下相关数据和方法,就花半小时写了个代码。 然后再花半小时写下这篇博客记录一下。 因为基于多次拍…

通过windows cng api 实现rsa非对称加密

参考: 1,使用 CNG 加密数据 - Win32 apps | Microsoft Learn 2,不记得了 (下文通过cng api演示rsa加密,不做原理性介绍) 相对于aes等对称加密算法,rsa加密算法不可逆性更强。非对称加密在通常情况下,使…

前端传输formDate格式的数据,后端不能用@RequestBody接收

写了个接口,跟前端对接,前端说怎么一直415的报错 我寻思不对啊,我swagger都请求成功了,后来发现前端一直是以formdata格式提交的数据,这样我其实是可以不加RequestBody的; 知识点: RequestBody…