YARN Timeline Server 概述
YARN Timeline Server 介绍
以通用方式存储和检索应用程序的当前和历史信息是通过时间轴服务器在 YARN 中实现的。它有两项责任:
1、存储应用程序特定的信息
完全特定于应用程序或框架的信息的收集和检索。例如,Hadoop MapReduce 框架可以包含一些信息,比如 map 任务的数量、reduce 任务、计数器等等。应用程序开发人员可以通过应用程序主容器和/或应用程序容器中的 TimelineClient 将特定信息发布到时间轴服务器。
然后,可以通过 REST api 查询此信息,以供特定于应用程序/框架的ui呈现。
2、保存关于已完成应用程序的通用信息
在此之前,应用程序历史服务器只支持 MapReduce 作业。随着时间轴服务器的引入,应用程序历史服务器成为时间轴服务器的一种用途。
一般信息包括应用程序级别的数据,如:
- 队列名称
- 用户信息和类似的设置在 ApplicationSubmissionContext 中
- 为应用程序运行的应用程序尝试列表
- 关于每个应用程序尝试的信息
- 在每次应用程序尝试下运行的容器列表
- 关于每个容器的信息
YARN 资源管理器将通用数据发布到时间轴存储区,并使用其 web-UI 显示有关已完成应用程序的信息。
现状和未来计划
Current status
- 时间轴服务器的核心功能已经完成。
- 它可以在安全集群和非安全集群中工作。
- 通用历史服务是在时间轴存储上构建的。
- 历史记录可以存储在内存或 leveldb 数据库存储中;后者确保在时间轴服务器重新启动时保留历史记录。
- 不支持在纱线中安装特定于框架的 ui。
- 特定于应用程序的信息只能通过使用 JSON 类型内容的 RESTful api 获得。
- “时间轴服务器v1” REST API 已经被声明为 REST API 之一,其兼容性将在未来的版本中维护。
- 时间轴服务器的单服务器实现限制了服务的可伸缩性;它还可以防止服务成为 YARN 基础设施的高可用性组件。
Future Plans
- 未来的版本将引入一个可扩展且可靠的下一代时间轴服务,即“时间轴服务v2”。
- 此服务的扩展特性可能不适用于使用时间轴服务器 v1 REST API 的应用程序。这包括扩展的数据结构以及客户端在时间轴服务器实例之间进行故障转移的能力。
Timeline 结构
时间轴域为时间轴服务器提供了一个名称空间,允许用户托管多个实体,将它们与其他用户和应用程序隔离开来。时间轴服务器安全性在此级别定义。
“域”主要存储所有者信息、读写 ACL 信息、创建和修改时间戳信息。每个域由一个 ID 标识,该 ID 必须在纱线集群中的所有用户中是唯一的。
时间线实体包含概念实体及其相关事件的元信息。
实体可以是应用程序、应用程序尝试、容器或任何用户定义的对象。
它包含主过滤器,用于索引时间轴存储中的实体。因此,用户/应用程序应该谨慎地选择他们想要作为主要过滤器存储的信息。
其余的数据可以存储为非索引信息。每个实体都由 EntityId 和 EntityType 唯一标识。
时间线事件描述与应用程序的特定时间线实体相关的事件。
用户可以自由定义事件的含义 -- 例如启动应用程序、分配容器、操作失败或其他与用户和集群操作员相关的信息。
......