导读:
本文从利用率提升、多负载场景优化、稳定性提升、异地多活四个方面介绍了字节跳动在四年来对 Hadoop YARN 进行的一系列的优化,以及生产环境中的实践经验。
1.YARN 简介
1.1 YARN 生态圈
YARN (Yet Another Resource Negotiator) 是 Hadoop 集群的资源管理系统,是 Hadoop 生态中非常重要的成员项目。
一般来说,离线生态可以分为五层:
最底层是裸金属层, 由众多物理节点组成,每个节点上运行着通用的操作系统。
次底层是集群资源管理层, YARN 就处在这一层中。
再往上是分布式计算引擎层, MR/Spark/Flink 等计算引擎处于这层,为了能让业务同学更加低成本的写计算任务, 各个引擎都支持 SQL 功能。
再往上是作业托管层,用来提交 ad-hoc 的作业,管理周期性的批处理作业,管理长时间运行的流式作业。
最上层是用户逻辑层,如数据日报,数据分析,模型训练等.
1.2 YARN 架构
上图中灰色背景区域是 YARN 的主要架构, 主要包含两种角色:
ResourceManager
-
整个集群的大脑,负责为应用调度资源,管理应用生命周期。
对用户提供接口,包括命令行接口,API, WebUI 接口。
可以同时存在多个 RM,但同一时间只有一个在工作,RM 之间通过 ZK 选主。
NodeManager
-
为整个集群提供资源,接受 Container 运行。
管理 Contianer 的运行时生命周期,包括 Localization,资源隔离,日志聚合等。
YARN 上运行的作业:
在运行时会访问外部的数据服务,常见的如 HDFS,Kafka 等
会在运行结束后由 YARN 负责将日志上传到 HDFS 中
2.字节跳动对 YARN 的定制
字节跳动的 YARN 是在 16 年从社区当时最新的 2.6.0 版本中 fork 出来的,主要承载着公司内的离线作业/流式作业/模型训练三大场景。由于公司内的 YARN 服务规模巨大、场景复杂,遇到了各种问题,在社区版本没有提供解决方案之前,内部研发同学定制了许多内容来解决具体问题,经过 4 年来上千次的修改&#