YARN 中的 Timeline Server 是什么?起什么作用?
在 Apache Hadoop YARN 的架构中,Timeline Server(通常简称为 ATS,Application Timeline Server) 是一个非常重要的组件。
简单来说,它是一个用于收集、存储和检索 YARN 上运行的应用程序的当前和历史指标与元数据的服务。
下面为您详细拆解它的定义、背景以及具体的作用。
一、 为什么需要 Timeline Server?(背景)
在 Timeline Server 出现之前,YARN 面临着几个痛点:
- Resource Manager (RM) 的内存限制:
RM 的核心职责是资源调度。虽然它可以显示正在运行和刚刚完成的应用程序信息,但为了不撑爆内存,RM 只会保留最近一段时间的作业记录。一旦作业完成很久,或者 RM 发生重启,这些历史数据就会丢失。 - JobHistory Server (JHS) 的局限性:
Hadoop 早期有 JobHistory Server,但它是专门为 MapReduce 定制的。随着大数据生态的发展,YARN 上运行了越来越多其他的计算框架(如 Spark、Tez、Flink 等)。这些框架没有一个统一的、标准的组件来存储和展示它们的历史运行轨迹和度量数据。
为了解决这些问题,Hadoop 社区引入了 YARN Timeline Server,作为一个通用的、跨框架的历史信息和度量数据存储中心。
二、 Timeline Server 的核心作用
Timeline Server 的作用可以总结为以下几个方面:
1. 提供统一的历史数据存储与查询(通用性)
它不仅能够记录 MapReduce 的作业历史,还能记录 Spark、Tez、Flink 等任何运行在 YARN 上的应用程序的历史。它为所有计算框架提供了一个统一的平台来展示生命周期数据。
2. 持久化应用程序数据(持久性)
即使 ApplicationMaster (AM) 已经退出,或者 Resource Manager 发生了重启,用户依然可以通过 Timeline Server 的 Web UI 或 REST API 查询到历史作业的详细执行情况。
3. 辅助故障排查与性能调优(诊断性)
开发者可以通过查询 Timeline Server,了解作业在各个阶段的耗时、各个 Task(任务)的执行状态、资源消耗情况以及自定义的计数器(Counters)。这对于排查作业运行失败的原因、分析系统瓶颈至关重要。
4. 提供丰富的 REST API 服务
它向外部(如第三方监控系统、用户自定义的大屏展示等)提供标准的 REST API,方便外部系统拉取 YARN 上所有作业的历史元数据和度量信息。
三、 Timeline Server 存储哪些数据?
Timeline Server 存储的数据主要分为两大类:
通用信息(Generic Information):
这是所有 YARN 应用程序共有的基本信息。主要由 Resource Manager 收集并写入。- Application ID(应用ID)
- User(提交作业的用户)
- Queue(作业所在的队列)
- Application Name(应用名称)
- 启动时间、结束时间
- 最终状态(SUCCEEDED, KILLED, FAILED 等)
框架特有信息(Framework-Specific Information):
这是由具体的计算框架(如 Spark AM, Tez AM)或者应用程序本身收集并写入的详细信息。- 事件(Events): 比如某个 Task 开始、Task 结束、Container 分配等。
- 指标(Metrics): CPU 消耗、内存占用、HDFS 读写字节数等。
- 配置(Configuration): 作业运行时的特定环境参数和配置。
- DAG/拓扑结构: 比如 Tez 引擎的执行计划图(DAG)。
四、 Timeline Server 的演进(V1 与 V2)
随着 YARN 集群规模的不断扩大,Timeline Server 也经历了重要的架构升级:
- Timeline Server V1 (ATS v1):
早期版本,通常使用本地文件系统(LevelDB)作为底层存储。它的缺点是单点架构,当集群中有海量的短任务(如流处理、大量小批处理)时,单一的 ATS 实例会成为写入瓶颈,且扩展性差。 - Timeline Server V2 (ATS v2):
在 Hadoop 3.x 中全面推广。它采用了分布式架构,底层通常使用 HBase 作为分布式存储后端。它引入了分布在各个 NodeManager 上的Timeline Collector,应用程序将数据先写入本地的 Collector,再聚合写入 HBase。这彻底解决了 V1 的性能瓶颈,支持超大规模集群的指标收集。
总结
可以将 YARN Timeline Server 理解为 YARN 集群的“黑匣子”和“档案馆”。它默默记录着所有计算框架(MR、Spark、Flink等)从生到死的每一个关键动作和指标,当你想知道“昨天那个作业为什么跑得那么慢”或者“那个 Spark 任务到底消耗了多少资源”时,Timeline Server 就是你寻找答案的地方。