写作背景

首先如题目所示,这是一篇翻译自 Ambari 官方设计文档的文章,那么 Ambari 是什么就不多说了,翻译这篇文章的目的是,作者所在的项目组的大数据管理框架目前刚好决定要用 Ambari 代替了 CDH,在 Ambari 基础上进行二次开发来满足我们的项目需求,作为 QA 同学要测好这个项目那么就需要对 Ambari 有一个基本的了解,所以有了翻译这篇技术文档的想法,一是满足自己学习的目的了二是想着也可以给类似和我一样需要的同学一个学习资料吧。由于作者水平有限,全文也是借助翻译软件一点点抠的,有不准确的地方欢迎指正

设计目标

跨平台(Platform Independence )

系统架构必须支持在任何硬件和操作系统上运行,如:红帽,ubuntu,微软操作系统,平台的组成部分应该由定义好的插件方式存在(例如 组件安装依赖 yum.rpm 包等)。

可插拔的组件 (Pluggable Components)

体系架构不能采用特定的工具和技术,任何特定的工具或技术都必须封装在插件中,整个体系架构应该更关心插件的可插拔性和其插件的工具配置的选择和数据库的存储状态,这个目标可能不会立即实现,但是但是在未来一定是可容易扩展的,可插拔性这个目标不应该包含组件协议或者第三方组件接口的标准。

版本管理和升级(Version Management & Upgrade )

运行在各个节点 Ambari 组件必须支持多种协议版本为了支持依赖组件的独立升级,升级任何组件都不能影响 Ambari 的集群状态。

可扩展性(Extensibility )

设计应该很简单就可以支持增加新的服务,组件和 APIs 的可扩展性也意味着很容易修改 Hadoop 堆栈的任意配置和配置步骤,此外,还要考虑指支持 HDP 以外的 Hadoop 堆栈的可能性

故障恢复(Failure Recovery )

系统必须可以从任意组件故障都能恢复到一致性状态,系统应该恢复后尝试完成挂起的操作。如果某些错误是不可恢复的,那么系统应该仍然可以一直保持状态一致性。

安全(Security)

安全意味着用户身份验证和 Ambari 基于角色的授权(包括 API 和 WEBUI)的安装,管理,以及通过 Kerberos 安装保护的监控,对 Ambari 与组件之间的在线通信进行验证和加密

错误追踪(Error Trace )

该设计力求简化跟踪失败的过程,应该把故障传播给用户,并提供足够详细的信息进行分析。

接近实时的反馈和操作(Near Real-Time and Intermediate Feedback for Operations )

用户需要一段时间才能完成操作,系统应该向用户提供当前运行任务的中间进度反馈和操作完成的百分比,关联操作的日志,在之前安装的 Ambari 版本,由于 Puppet 的主 - 代理体系结构及其状态报告机制,之前版本对状态这些显示是不可用的。

术语(Terminology )

服务(Service )

Services 是指 Hadoop 堆栈中的服务,例如:HDFS, HBase, and Pig 这些都是服务,一个服务有多个组件组成(例如:HDFS 有 NameNode,副本 NameNode,DataNode 等),服务也可以是一个客户端的库(例如:Pig 没有守护进程只有一个客户端库)

组件(Component)

服务由一个或多个组件组成,HDFS 有 NameNode,副本 NameNode,DataNode 有三个组件,组件是可选的,一个组件可以跨域多个节点(例如:DataNode 就可以是多个节点上的实例)

节点(Node/Host )

节点是指集群中的一台机器,本文中的 Node 或 Host 可以互相使用。

节点组件(Node-Component)

节点组件是指特定节点上的组件,特定节点上的特定 DataNode 实例就是节点组件

操作(Operation)

操作是指在集群上一组修改或操作,为满足用户的亲故或实现集群中的理想状态的修改。例如:启动服务是一个操作,冒烟测试也是一个操作。如果用户请求是为了给集群增加一个新的服务那么就应该包含运行一个冒烟测试。满足用户的整个请求的所有动作即将构成一个操作,一个操作应该由多个有序的动作组成(见下文)

任务(Task)

任务是为了发送到节点为了执行的工作单元,任务是节点作为执行的一部分工作的。例如:执行包含在节点 1 上安装一个 datanode 和安装一个 datanode 和一个副本 datanode 在 n2;这个例子中任务就是在 n1 节点安装一个 datanode 和在 n2 节点安装一个 datanode 和一个 datanode 副本。

阶段(Stage)

阶段意味着完成一个操作所需要的一组任务,这些任务互相独立。相同阶段的任务可以在不同节点并行

动作/行为(Action )

一个动作由在一台机器或一组机器上的多个任务组成。每个操作由一个操作 id 追踪,节点上报状态至少是以动作粒度的。一个动作被认为是一个阶段,本文中除非另有说明否则动作和阶段就是一一对应的。action id 将是 request-id 和 stage-id 的双应射。

阶段计划(Stage Plan )

一个操作通常由不同机器上的多个任务组成,它们通常有依赖关系,要求它们以特定的顺序运行,在调度其他任务之前,有些任务需要先完成。因此,一个操作所需的任务可以分为不同的阶段,每个阶段必须在下一个阶段之前完成。但是所有相同阶段的所有任务可以在不同节点并行执行。

清单(Manifest )

Manifest 指的是被发送到节点执行的任务的定义,清单必须完全定义任务,并且必须是可序列化的。清单也可以保存在磁盘上以进行恢复或记录

角色(Role)

角色可以映射到任意一个组件,例如:datanode,namedoe,或者是一个动作,例如:HDFS 重新平衡,Hbase 冒烟测试,或其他管理命令等等

Ambari 架构(Architecture)

下图是 Amabri 的高级架构图
在这里插入图片描述
下面是 Ambari 的 server 端详细设计
在这里插入图片描述
下图是 Ambari 的 Agent 详细设计
在这里插入图片描述

使用示例:

在本节中我们覆盖了一些基本使用例子和系统在更高层次上描述请求如何服务的和组件是如何交互的。

增加服务:

在已存在集群中增加一个服务,这里给出一个为一个已存在的集群增加 Hbase 服务的特殊例子,Habse 的主和从将会增加到一个现有节点的子集(没有额外的节点),它将通过以下几个步骤:

Recovery

在主恢复方面有两个主要选择

待定:如何重新启动代理?

结尾

如何获取 Ambari 原文 PDF 可直接加作者 VX

欢迎和作者一起探讨如何成为一名优秀的软件测试工程师,实现软件测试工程师的自我价值~ 从而实现升职加薪 迎娶白富美 走向人生巅峰…(😏😏😏😏😏😏😏😏😏😏)

作者 VX:1010584905


↙↙↙阅读原文可查看相关链接,并与作者交流