总体概述

官网: https://ambari.apache.org/

官方定义

Apache Ambari is a tool for provisioning, managing, and monitoring Apache Hadoop clusters. Ambari consists of a set of RESTful APIs and a browser-based management interface.

github

基本组件

  • server,核心模块,提供 web方式管理,REST API 方式管理,用来控制 agent
  • agent,安装在每个 host 上,接收 server 的命令,做对应的操作
  • web,展示用户前端信息
  • metrics,包含 收集器 collector,采集器 metrics(采集系统指标),以及各种 hadoop 组件的监控

依赖的其他开源项目

  • agent端,采用了puppet管理节点。
  • web端,采用ember.js作为前端MVC框架和NodeJS相关工具,用handlebars.js作为页面渲染引擎,在CSS/HTML方面还用了Bootstrap框架
  • Server端,采用了Jetty、Spring、JAX-RS等。
  • 同时利用了Ganglia、Nagios的分布式监控能力。

Ambari-Server

server 是一个核心的组件,定期跟 agent 做心跳
agent 接收 server 的命令,安装组件
可以通过 web控制台,或者 shell,或者 REST API 的方式连接 server,操作集群
监控系统也会读取 server 的api,展示信息
操作的信息回保存在内部的数据库中

Ambari Server 技术栈

  • Server code: Java 1.7 / 1.8
  • Agent scripts: Python
  • Database: Postgres, Oracle, MySQL
  • ORM: EclipseLink
  • Security: Spring Security with remote LDAP integration and local database
  • REST server: Jersey (JAX-RS)
  • Dependency Injection: Guice
  • Unit Testing: JUnit
  • Mocks: EasyMock
  • Configuration management: Python

Ambari-Server是一个WEB Server,提供统一的REST API接口,同时向web和agent开放了两个不同的端口

  • 默认前者是8080
  • 后者是8440或者8441

它是由Jetty Server容器构建起来的,通过Spring Framework构建出来的WEB服务器
其中大量采用了google提供的Guice注解完成spring框架所需要的注入功能
REST框架由JAX-RS标准来构建

如下图所示,server端主要维护三类状态:

  1. Live Cluster State:集群现有状态,各个节点汇报上来的状态信息会更改该状态
  2. Desired State:用户希望该节点所处状态,是用户在页面进行了一系列的操作,需要更改某些服务的状态,这些状态还没有在节点上产生作用;
  3. Action State:操作状态,是状态改变时

Ambari-server的Heartbeat Handler模块用于接收各个agent的心跳请求
心跳请求里面主要包含两类信息

  • 节点状态信息
  • 返回的操作结果

把节点状态信息传递给FSM状态机去维护着该节点的状态,并且把返回的操作结果信息返回给Action Manager去做进一步的处理
Coordinator模块又可以称为API handler,主要在接收WEB端操作请求后,会检查它是否符合要求,stage planner分解成一组操作,最后提供给Action Manager去完成执行操作
Ambari-Server的所有状态信息的维护和变更都会记录在数据库中,用户做一些更改服务的操作都会在数据库上做一些相应的记录,同时,agent通过心跳来获得数据库的变更历史

Ambari-Agent

ambari-agent是一个无状态的。其功能主要分两部分:

  • 采集所在节点的信息并且汇总发心跳汇报给ambari-server;
  • 处理ambari-server的执行请求

它有两种队列

  • 消息队列MessageQueue,或为ResultQueue。包括节点状态信息(包括注册信息)和执行结果信息,并且汇总后通过心跳发送给ambari-server
  • 操作队列ActionQueue。用于接收ambari-server返回过来的状态操作,然后能过执行器按序调用puppet或python脚本等模块完成任务

ambari-agent 的引导流程包括

  • SSH
  • 人工手动的非 SSH

这里只记录 SSH 方式

  1. Ambari Server通过调用bootstrap.py来初始化整个bootstrap进程
  2. Server端通过SSH Keys在Agent上配置Ambari Repo:利用Ambari Server上的ambari.repo文件,并且scp到Agent Host上。
  3. 复制Ambari Agent Setup script:利用scp命令将setupAgent.py脚本复制到Agent host上。
  4. 在各个Agent上执行Ambari Agent Setup script:SSH到各个Agent Host上然后执行setupAgent.py。
  5. 在Agent上安装epel-release:用apt-get/yum/zypper工具来安装epel-release包
  6. 在Agent上安装Ambari-agent:用apt-get/yum/zypper工具来安装Ambari-Agent包
  7. 配置Ambari-agent.ini:修改/etc/ambari-agent/conf/ambari-agent.ini,并设置agent host上的hostname
  8. 启动Ambari-agent:启动Ambari-agent进程
  9. 开始Ambari Agent注册:agent开始registration进程

agent 向 server 的注册流程

Ambari-Web

Ambari-web使用了一个流行的前端Embar.js MVC框架实现

  • Embar.js是一个TodoMVC框架,它涵盖了现今典型的单页面应用(single page application)几乎所有的行为
  • 使用brunch 作为项目的构建管理工具,是一个超快的HTML5构建工具。它有如下功能
    • 编译你的脚本、模板、样式、链接它们。
    • 将脚本和模板封装进common.js/AMD模块里,链接脚本和样式。
    • 为链接文件生成源地图,复制资源和静态文件。
    • 通过缩减代码和优化图片来收缩输出,看管你的文件更改。
    • 并通过控制台和系统提示通知你错误。
  • 使用了 NodeJS

Nodejs 是一个基于Chrome JavaScript运行时建立的一个平台,用来方便的搭建快速的易于扩展的网络应用,NodeJS借助事件驱动,非阻塞I/O模型变得轻量和高效,非常适合运行在分布式设备的数据密集型的实时应用

Ambari Web

  • Frontend code: JavaScript
  • Client-side MVC framework: Ember.js / AngularJS
  • Templating: Handlebars.js (integrated with Ember.js)
  • DOM manipulation: jQuery
  • Look and feel: Bootstrap 2
  • CSS preprocessor: LESS
  • Unit Testing: Mocha
  • Mocks: Sinon.js
  • Application assembler/tester: Brunch / Grunt / Gulp

Ambari-Metrics

官方定义:

Ambari Metrics System (“AMS”) is a system for collecting, aggregating, serving and visualizing daemon and system metrics in Ambari-managed clusters.

术语

Term Definition
Metrics Collector The standalone server that collects metrics, aggregates metrics, serves metrics from the Hadoop service sinks and the Metrics Monitor.
Metrics Monitor Installed on each host in the cluster to collect system-level metrics and forward to the Metrics Collector.
Metrics Hadoop Sinks Plug-ins into the various Hadoop components sinks to send Hadoop metrics to the Metrics Collector.

架构如下

  • Metrics Collector 是后台进程,用于收集 monitor、sinks 发过来的数据
  • sinks 包含了各种 hadoop的监控插件,可以收集 各种组件的监控指标
  • collector 可以将数据存储到本地文件系统中、或者 分布式文件系统中
  • ambari-server收集到这些指标后,通过 API 暴露出去,web-ui 用来展示这些结果
  • 整个系统可以被 ambari 安装和管理

参考