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

本文主要是介绍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 混部,小红书在离线混部实践分享的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/527872

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

定价129元!支持双频 Wi-Fi 5的华为AX1路由器发布

《定价129元!支持双频Wi-Fi5的华为AX1路由器发布》华为上周推出了其最新的入门级Wi-Fi5路由器——华为路由AX1,建议零售价129元,这款路由器配置如何?详细请看下文介... 华为 Wi-Fi 5 路由 AX1 已正式开售,新品支持双频 1200 兆、配有四个千兆网口、提供可视化智能诊断功能,建

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试