Ambari 项目结构

* 本文从Ambari的业务功能的角度展开,对Ambari的各个模块功能做一个简单的概述。*

Ambari 主要分为三部分:
  • Server
     内含ambari-server(java/shell/python)、ambari-web(js/html)、ambari-admin(js/html)三个子项目
  • Ambari-Agent
     * ambari-agent(python)项目*
  • Ambari-Metrics
     又称AMS(Ambari-Metrics-System),内含ambari-xxxx-sink(java)、ambari-metrics-collector(java)、ambari-metrics-monitor(java)等
Ambari 项目结构_第1张图片
***--Ambari架构图--***

心跳机制
  ambari-server和ambari-agent是通过ambari-agent定期发送post请求上报agent所在主机的状态,ambari-server在接收到ambari-agent上报的状态后,给ambari-agent返回应该在这台主机上执行的指令,这样一次完整的流程就是一次心跳,通过心跳完成主从交互的这种机制就是心跳机制

Server

此Server 并不是代码层面的的Ambari-Server,而是站在业务的角度来看,server 将集群的状态通过web UI 或RESTAPI的形式呈献给用户,也是通过这两种形式将用户的指令(比如stop namenode、start datanode)下发到集群,从而完成用户与hadoop集群的交互。
  server 从代码层面由三个项目组成:ambari-server、ambari-web、ambari-agent。也就是说在将ambari项目打成rpm包时,这三个项目会汇总到一个名字叫ambari-server-xxxx.rpm包中。

  • 用户和集群的交互流程######

在server安装、配置完成并启动后,用户通过浏览器访问server,在地址栏输入的url是由ambari-web(以后简称web)模块响应请求,web端又调用ambari-server 的rest api获取数据显示在浏览器页面上。当用户想要通过浏览器操作集群(stop、start某些组件)时,由web端向ambari-server发送post或put请求,ambari-server 接收到请求后通过心跳机制,向ambari-agent(以后简称agent)发送指令,最后由agent执行shell或python脚本来完成。

  • 显示在浏览器上的数据来源######

浏览器页面上显示的数据根据时间状态可以分为两种类型。一种是集群内各服务的实时状态信息,这类数据是由AMS模块实时采集上报给Ambari-Metrics-Collector,再由Ambari-Server调用ambari-metrics-collector的REST AP显示在页面上。这部分数据没有落地到ambari-server 的数据库中,在每次web端调用ambari-server的数据时,ambari-server都会调用ambari-metrics-collector获取数据,进行适当的加工处理后直接返回给web端 显示在浏览器页面上。还有一种由ambari-server缓存在内存,持久化到数据库的数据,这类数据比如主机列表、服务列表、服务的配置信息等。这些数据是由agent采集通过心跳发送给ambari-server后,ambari-server更新自身的数据状态。当web端调用ambari-server的rest api获取这些数据时,ambari-server将web端请求的数据直接返回给web显示在浏览器页面。

Ambari-Agent

ambari-agent 是由Python语言开发,负责对集群内主机状态的采集以及执行ambari-server发来的指令,将执行结果上报给ambari-server。ambari-agent虽然是离hadoop集群最近的一个模块,但是它不保存集群的任何状态信息,完全听命于ambari-server。

Ambari-Metrics(AMS)

AMS是ambari内部一个比较完整的系统,全权负责集群内各组件状态信息的采集。

--待完善

参考

  • https://github.com/apache/ambari

你可能感兴趣的:(Ambari 项目结构)