Ambari架构
总体概述
官网: 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端主要维护三类状态:
- Live Cluster State:集群现有状态,各个节点汇报上来的状态信息会更改该状态
- Desired State:用户希望该节点所处状态,是用户在页面进行了一系列的操作,需要更改某些服务的状态,这些状态还没有在节点上产生作用;
- 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 方式
- Ambari Server通过调用bootstrap.py来初始化整个bootstrap进程
- Server端通过SSH Keys在Agent上配置Ambari Repo:利用Ambari Server上的ambari.repo文件,并且scp到Agent Host上。
- 复制Ambari Agent Setup script:利用scp命令将setupAgent.py脚本复制到Agent host上。
- 在各个Agent上执行Ambari Agent Setup script:SSH到各个Agent Host上然后执行setupAgent.py。
- 在Agent上安装epel-release:用apt-get/yum/zypper工具来安装epel-release包
- 在Agent上安装Ambari-agent:用apt-get/yum/zypper工具来安装Ambari-Agent包
- 配置Ambari-agent.ini:修改/etc/ambari-agent/conf/ambari-agent.ini,并设置agent host上的hostname
- 启动Ambari-agent:启动Ambari-agent进程
- 开始Ambari Agent注册:agent开始registration进程
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 安装和管理