Ambari
Ambari介绍
Ambari 是 Apache Software Foundation 的一个顶级开源项目,是一个集中部署、管理、监控 Hadoop 分布式集群的工具。但是这里的 Hadoop 是一个广义概念,并不仅仅指的是 Hadoop(HDFS、MapReduce),而是指 Hadoop 生态圈(包括 Spark、Hive、Hbase,Sqoop,Zookeeper、Flume 等),Ambari 可以使 Hadoop 大数据软件更容易使用,且可以方便的集成我们自己的服务让 Ambari 统一管理。
- 部署:自动化部署 Hadoop 软件,能够自动处理服务、组件之间的依赖(比如 HBase 依赖 HDFS,DataNode 启动的时候,需要 NameNode 先启动等)。
- 管理:Hadoop 服务组件的启动、停止、重启,配置文件的多版本管理。
- 监控:Hadoop 服务的当前状态(组件节点的存活情况、YARN 任务执行情况等),当前主机的状态(内存、硬盘、CPU、网络等),而且可以自定义报警事件。
Ambari架构
由四部分组成
- Brower:指的是前端,前端通过 HTTP 发送 Rest 指令和 Ambari Server 进行交互。
- Ambari Server:是一个 web 服务器,开放两个端口,分别用来和前端、Agent 进行交互。Ambari Server 的数据存储在 MySQL 中。
- Metrics Collector:是一个 web 服务器,提供两个功能,一方面将 Metrics Monitor 和 Metrics Sink 汇报上来的监控信息存储到 HBase 中,另一方面提供监控信息查询接口,供 Ambari Server 进行查询。
- Host:实际安装大数据服务的主机,可以有多台。从图中可以看出,每台主机都安装有一个 Ambari Agent 服务和 Metrics Monitor 服务,有些组件如果需要更详细和特有的监控信息,可以集成相对应的 Metrics Sink(比如HDFS的 Metrics Sink 可以监控空间的使用情况)。
Ambari主要功能
- 核心业务:集群的统一部署、管理以及基本的监控(比如组件的存活情况)都是由这条线来完成的,由前端、Ambari Server 和 Ambari Agent 组成。前端提供可视化界面,发送操作指令;Ambari Server 维护着整个集群的状态;Ambari Agent 执行具体的指令去操作服务和组件,而且会通过心跳汇报 Host 和服务的状态信息。
- Metrics 监控业务:提供详细的监控功能,由 Metrics Collector、Metrics Monitor、Metrics Sink 组成。Metrics Collector 存储监控信息,并提供查询接口;Metrics Monitor 主要负责收集并汇报 Host 相关的指标,比如主机的 CPU、内存、网络等;Metrics Sink 负责收集并汇报组件的相关指标,比如该组件的 CPU 使用率,内存使用情况等。
Ambari Server 详解
组成部分:Resource Service、HeartBeatHandler、ActionQueue、FSM
- Resource Service
资源服务,用来接收前端的 Rest 请求。资源服务,用来接收前端的 Rest 请求。关于 Resource 的几个基本概念:
- Resource:Ambari Server 定义了各种各样的 Resource,比如 Config、User、Cluster、Component、Alert 等。
- Resource Type:每种 Resource 都对应一个 ResourceType,标记所属的资源类型。
- Resource Service:每种 Resource 都对应一个 Resource Service,比如ConfigService、UserService等,Service 中定义了相对应 Resource 的 Rest API。
- Resource Provider:每种 Resource 都对应一个 ResourceProvider,比如ConfigResourceProvider、UserResourceProvider等,对 Resource 的具体操作,都封装在 Provider 中。
- HeartBeatHandler:处理 Agent 的 Heartbeat 请求
- ActionQueue:每个 Host 都有一个 ActionQueue 记录着需要这台 Host 执行的命令。
- FSM:维护组件状态的有限状态机。
Ambari Server 工作流程
- 前端请求处理流程:前端提交一个 Rest 请求,相应 Resource 的 Service 处理请求,根据 ResourceType 找到对应的 ResourceProvider 执行具体的操作;如果存在需要 Agent 执行的操作,则把操作存储到相应 Host 的 ActionQueue 中;如果需要改变组件的状态,则需要操作 FSM。
- Agent 请求处理流程:Agent Heartbeat 每10秒执行一次,Heartbeat Request 会携带命令的执行情况、组件状态以及 Host 状态等信息,HeartBeatHandler 会根据汇报上来的命令执行情况,去操作 FSM 来维护组件的状态;HeartBeatHandler 会从 ActionQueue 中取出需要 Host 执行的命令、修改的配置、Alert 定义等信息,通过 HeartBeat Response 返回给 Agent 执行。
Ambari Agent 详解
主要由三部分组成
- HeartBeatHandler:发送 HTTP 请求和 Ambari Server 进行交互。
- ActionExecutor:Command 执行器。
- AlertSchedulerHandler:Alert 处理器。
图中的四个数据容器
- CommandQueue:存储需要执行的 Command。
- ResultMap:存储 Command 的执行结果。
- Alert definitions file:是一个文件,保存所有的 Alert 定义。
- AlertCollect:存储 Alert 的检查结果。
Ambari Agent 工作流程
- HeartBeatHandler:通过ResultMap收集组件当前状态和Command 执行结果、通过AlertCollect收集Alert检查结果等,封装到 HTTP Request 当中,发送给 Ambari Server。Ambari Server 响应请求,通过 HTTP Response 带回来需要执行的 Command、需要终止的 Command、发生修改的 Config、发生修改的 Alert 定义等。Ambari Agent再把 Comand 和 修改的 Config 封装为 Agent Command 对象,存储到 CommandQueue 中;把修改的 Alert 定义,更新到 Alert definitions 文件中(如果 Alert definitions 文件发生了变化,需要通知 AlertSchedulerHandler 重新加载一遍)。
- ActionExecutor:定期从 CommandQueue 中加载需要执行的 Command,找到 Command 对应的 Python 脚本,执行脚本,并把结果存储到 ResultMap 中。
- AlertSchedulerHandler:从 Alert definitions 文件中加载所有 Alert 定义,根据 Alert 定义,找到对应的 Python 脚本,周期性执行,并把结果存储到 AlertCollect 中。
Ambari 项目目录
目录 | 描述 |
Ambari-server | Ambari的Server,依赖python,采用了Jetty、Spring、JAX-RS等 |
Ambari-agent | agent节点,使用facter采集信息,puppet管理节点 |
Contrib | 自定义第三方库 |
ambari-web | Ambari页面UI的代码,作为用户与Ambari server交互的,采用ember.js作为前端MVC框架和NodeJS相关工具,用handlebars.js作为页面渲染引擎,在CSS/HTML方面还用了Bootstrap框架 |
ambari-views | 用于扩展Ambari Web UI中的框架 |
Docs | 文档 |
ambari-common | Ambari-server 和Ambari-agent 共用的代码 |