转载自
https://www.jianshu.com/p/dc73d9d03823
有部分补充和改动
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架构图–
-
心跳机制
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 API显示在页面上。这部分数据没有落地到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内部一个比较完整的系统,全权负责集群内各组件状态信息的采集。
AMS 也是一个 Master-Slave 结构的框架。Master 模块便是 Metrics Collector,Slave 则是 Metrics Monitor 和 Hadoop Sinks。Slave 模块负责收集信息,并发送给 Collector。默认安装时Ambari Metrics为embedded模式,这样收集的所有数据是存放在Collector节点的本地的,大量的Metrics数据会挤占大量的本地存储空间,该为分布式模式后Metrics数据会放置到HDFS上,所以通常这是安装Ambari后必备一个操作。
当然 Metrics Monitor 和 Hadoop Sinks 也有不同的职责,前者主要负责收集机器本身相关的指标,例如 CPU、Mem、Disk 相关信息;后者则负责收集 Hadoop 相关 Service 模块的性能数据,例如该模块Namenode占用了多少 Mem,以及该模块的 CPU 占用率等。