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 的详细介绍和使用方法!
相关文章:
Koordinator 支持 K8s 与 YARN 混部,小红书在离线混部实践分享
作者:索增增(小红书)、宋泽辉(小红书)、张佐玮(阿里云) 背景介绍 Koordinator 是一个开源项目,基于阿里巴巴在容器调度领域多年累积的经验孵化诞生,目前已经支持了 K8s…...
网游逆向分析与插件开发-游戏反调试功能的实现-项目需求与需求拆解
上一个专栏结束位置:网游逆向分析与插件开发-代码保护壳的优化-修改随机基址为固定基址-CSDN博客 上一个专栏是做了一个壳有了一定的保护,但是保护还是不够,最大的保护是根上把问题解决了,就是我不允许你对我进行调试,…...
阶段七-GitEE
Git:版本控制软件 Git的优点 1.1 协同修改 多人并行不悖的修改服务器端的同一个文件。 1.2 数据备份 不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。 1.3 版本管理 在保存每一个版本的文件信息的时候要做到不保存重复数据&…...
Redis小记(1)
目录 1.Redis和Mysql的区别 2.Redis常用命令 1.Redis和Mysql的区别 a:mysql和redis的存储方式不同 mysql是关系型数据库,用表来进行存储数据。 redis是通过键值对来存储数据,key使用string来标识,value可以是各种不同的数据结构。 b:mys…...
Flutter windows 环境配置
Flutter windows 环境配置 从零开始,演示flutter环境配置到启动项目,同时支持 vscode 和 android studio 目录 Flutter windows 环境配置一、环境配置1. Flutter SDK2. Android Studio3. JDK4. 拓展安装5. Visual Studio 2022二、项目创建和启动1. vsco…...
odoo17核心概念view5——ir_ui_view.py
这是view系列的第5篇文章,介绍一下view对应的后端文件ir_ui_view.py,它是base模块下的一个文件 位置:odoo\addons\base\models\ir_ui_view.py 该文件一共定义了三个模型 1.1 ir.ui.view.custom 查询数据库这个表是空的,从名字看…...
截断整型提升算数转换
文章目录 🚀前言🚀截断🚀整型提升✈️整型提升是怎样的 🚀算术转换 🚀前言 大家好啊!这里阿辉补一下前面操作符遗漏的地方——截断、整型提升和算数转换 看这一篇要先会前面阿辉讲的数据的存储否则可能看不…...
阿里云 ECS Docker、Docker Compose安装
https://help.aliyun.com/document_detail/51853.html https://docs.docker.com/compose/install/ Centos https://blog.csdn.net/Alen_xiaoxin/article/details/104850553 systemctl enable dockerdocker-compose安装 https://blog.csdn.net/qq465084127/article/details/…...
LeetCode——1276. 不浪费原料的汉堡制作方案
通过万岁!!! 题目,给你两个数tomatoSlices和cheeseSlices,然后每制作一个巨无霸汉堡则消耗4个tomatoSlices和1和cheeseSlices,每制作一个小皇堡则需要消耗2个tomatoSlices和1和cheeseSlices。问给你这两个…...
隆道吴树贵:生成式人工智能在招标采购中的应用
12月22日,由中国招标投标协会主办的招标采购数字发展大会在北京召开,北京隆道网络科技有限公司总裁吴树贵受邀出席大会,并在“招标采购数字化交易创新成果”专题会议上发言,探讨生成式人工智能如何在招标采购业务中落地应用。 本次…...
docker搭建kali及安装oneforall
前期docker的安装这里就不用多说了,直接看后面的代码 安装oneforall 1.安装git和pip3 sudo apt update sudo apt install git python3-pip -y2.克隆项目 git clone https://gitee.com/shmilylty/OneForAll.git3.安装相关依赖 cd OneForAll/ sudo apt install pyt…...
【MySQL】数据库之事务
目录 一、什么是事务 二、事务的ACID是什么? 三、有哪些典型的不一致性问题? 第一种:脏读 第二种:不可重复读 第三种:幻读 第四种:丢失更新 四、隔离级别有哪些? (1…...
AGV|RGV小车RFID传感器CNS-RFID-01/1S的RS232通讯联机方法
CNS-RFID-01/1S广泛应用于AGV小车,搬运机器人,无人叉车等领域,用于定位,驻车等应用,可通过多种通讯方式进行读写操作,支持上位机控制,支持伺服电机,PLC等控制设备联机,本…...
【Python可视化系列】一文教会你绘制美观的热力图(理论+源码)
一、问题 前文相关回顾: 【Python可视化系列】一文彻底教会你绘制美观的折线图(理论源码) 【Python可视化系列】一文教会你绘制美观的柱状图(理论源码) 【Python可视化系列】一文教会你绘制美观的直方图(理…...
百度Apollo五步入门自动驾驶:Dreamview与离线数据包分析(文末赠送apollo周边)
🎬 鸽芷咕:个人主页 🔥 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 粉丝福利活动 ✅参与方式:通过连接报名观看课程,即可免费获取精美周边 ⛳️活动链接…...
为什么IPv6 可以作为低功耗蓝牙的物联网体系结构?
蓝牙40规范引人了低功耗蓝牙(Bluetooth Low Energy,BLE)技术。低牙是一种低能低延成本的无线通信技术。 与传统蓝牙相比,低功耗蓝牙同样使用24GHz频段,但其将信道重新划分为 40个,包含37 个数据信道和3个广播信道(传统蓝牙共使用 79 个信道)低功蓝牙的协…...
GPT每预测一个token就要调用一次模型
问题:下图调用了多少次模型? 不久以前我以为是调用一次 通过看代码是输出多少个token就调用多少次,如图所示: 我理解为分类模型 预测下一个token可以理解为分类模型,类别是vocab的所有token,每一次调用都…...
运维工程师的出路到底在哪里?
1.35岁被称为运维半衰期,主要是因为运维工作的技术栈和工作方式在不断更新和演进。随着新技术的出现和发展,老旧的技术逐渐被淘汰,运维工作也需要不断学习和适应新技术,否则就容易被市场淘汰。 2.要顺利过渡半衰期,运…...
2312clang,基于访问者的前端动作
原文 基于RecursiveASTVisitor的ASTFrontendActions. 创建用RecursiveASTVisitor查找特定名字的CXXRecordDeclAST节点的FrontendAction. 创建FrontendAction 编写基于clang的工具(如Clang插件或基于LibTooling的独立工具)时,常见入口是允许在编译过程中执行用户特定操作的F…...
怎么搭建实时渲染云传输服务器
实时渲染云传输技术方案,在数字孪生、虚拟仿真领域使用越来越多,可能很多想使用该技术方案项目还不知道具体该怎么搭建云传输服务器,具体怎么使用实时云渲染平台系统。点量云小芹将对这两个问题做集中分享。 一、实时渲染服务器怎么搭建&…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...
