本文从利用率提升、多负载场景优化、稳定性提升、异地多活四个方面介绍了字节跳动在四年来对 Hadoop YARN 进行的一系列的优化 , 以及生产环境中的实践经验 。1.YARN 简介1.1 YARN 生态圈YARN (Yet Another Resource Negotiator) 是 Hadoop 集群的资源管理系统 , 是 Hadoop 生态中非常重要的成员项目 。
文章插图
一般来说 , 离线生态可以分为五层:
- 最底层是裸金属层 , 由众多物理节点组成 , 每个节点上运行着通用的操作系统 。
- 次底层是集群资源管理层 , YARN 就处在这一层中 。
- 再往上是分布式计算引擎层 , MR/Spark/Flink 等计算引擎处于这层 , 为了能让业务同学更加低成本的写计算任务 , 各个引擎都支持 SQL 功能 。
- 再往上是作业托管层 , 用来提交 ad-hoc 的作业 , 管理周期性的批处理作业 , 管理长时间运行的流式作业 。
- 最上层是用户逻辑层 , 如数据日报 , 数据分析 , 模型训练等.
文章插图
上图中灰色背景区域是 YARN 的主要架构 , 主要包含两种角色:
- ResourceManager整个集群的大脑 , 负责为应用调度资源 , 管理应用生命周期 。对用户提供接口 , 包括命令行接口 , API, WebUI 接口 。可以同时存在多个 RM , 但同一时间只有一个在工作 , RM 之间通过 ZK 选主 。
- NodeManager为整个集群提供资源 , 接受 Container 运行 。管理 Contianer 的运行时生命周期 , 包括 Localization , 资源隔离 , 日志聚合等 。
- 在运行时会访问外部的数据服务 , 常见的如 HDFS , Kafka 等
- 会在运行结束后由 YARN 负责将日志上传到 HDFS 中
今天给大家介绍一些比较关键的定制 , 希望能给大家带来一些启发 。这些关键定制主要包括四个方面:
- 利用率提升: 包括分配率提升和物理使用率提升 。
- 多种负载场景优化: 包括批处理 / 流式 / 模型训练 三种场景下的体验提升 。
- 稳定性提升: 包括摆脱对 HDFS 强依赖, Container 分级与驱逐, 非受控 Container 管理 。
- 异地多活: 包括统一的 YARN Client 和 UI 等内容 。
文章插图
社区原生版本的 FairScheduler 是单线程的 , 在节点数量较多时 , 是整体集群最大的瓶颈.
我们通过将 FairScheduler 改造为并发的多线程版本 , 并将调度器内部的锁拆分为更加细粒度的读锁和写锁 , 将调度吞吐提升 7 倍以上 , 在生产环境中达到每秒 3K 个 Container 的速度(未触及性能瓶颈) 。
2.1.2 考虑节点 DRF 的调度
文章插图
原生的 YARN 在调度时只考虑资源是否满足 , 经常会出现一个节点 CPU 被打满 , 但是内存还有剩余的情况 。
我们引入节点 DRF(Dominant Resource Fairness)机制 , 计算每个节点的剩余资源的主资源 , 当调度的 Task 的主资源与节点的主资源不匹配时 , 先延迟此次调度 , 直到一定次数后再放松约束 。
通过引入这个机制 , 集群资源的碎片化问题大幅降低 , 生产环境中可以达到 CPU 和内存的 24 小时平均利用率都在 90%以上 。
2.1.3 提升单集群规模
文章插图
单个集群的规模越大 , 就可以有更多的用户和作业使用这个集群 , 这个集群的利用率也会更高 。但是原生的 YARN 在达到 5K 节点规模时开始出现各种问题 , 比如说一次简单的切主可能会导致整个集群雪崩 。
推荐阅读
- 数据库:innodb数据组织形式
- 教你在几分钟内构建一个Python包
- 荀彧帮曹操后又反对曹操当魏王 荀彧在曹操中的地位
- 喝茶拉肚子是在排毒吗,五种养生茶是首选
- 在Linux中使用Bashtop与Bpytop监管系统资源
- 清平乐村居表达了诗人什么之情 清平乐村居词人在词中勾勒了一幅怎样的画面
- 手机游戏|在这一刻 我变成了光!《奥特曼》手游定档4月29日
- 吴用和谁在宋江坟前上吊 最后在宋江墓前自缢身亡的是
- 胡萝卜怎么切成花
- 烧烤如何练手法