微信搜索公众号:BearData,关注更多内容。
前几篇主要是从大体的方向介绍了Ambari,安装Ambari。本篇主要介绍Ambari的架构及源代码结构。
基本概念
1. Resource:Ambari把可以被管理的资源的抽象为一个Resource实例,资源可以包括服务、组件、主机节点等,一个resource实例包含了一系列该资源的属性
2. Property:服务组件的指标名称
3. ResourceProvider和PropertyProvider分别对应Resource和Property的提供方,获取指标需要先获取Resource,然后获取Property对应的metric
4. Query:Query是Resource的内部对象,代表了对该资源的操作
5. Request:一个Request代表了对Resource的操作请求,包含http信息及要操作的Resource的实例,Request按照http的请求方式分为四种:GET、PUT、DELETE、POST
6. Predicate:一个Predicate代表了一系列表达式,如and、or等
基本组件
Ambari 可以分为 5个大的组件,分别是 Ambari-server 、 Ambari-web 、 Ambari-agent 、 Ambari-metrics-collector 和 Ambari-metrics-monitor 。
1. 在集群的每一台机器上都会部署 Ambari-agent 。 Agent 主要负责接收来自 Server 端的命令, 这些命令可以是安装、启动、停止 集群上的某一服务。同时, agent 端需要向 Ambari-server 端上报命令执行的结果,成功或失败。
2. Ambari-Server 提供 REST 接口给Agent 和 Web 访问。用户甚至可以不用界面,直接通过 curl 命令来操控集群。
3. Ambari-metric-collector和 Ambari-metrics-monitor 是收集集群中组件 metrics 的模块。
Ambari项目目录结构
目录 |
描述 |
ambari-server |
Server代码,主要管理部署在每个节点上的管理监控程序 |
ambari-agent |
部署在监控节点上运行的管理监控程序 |
ambari-web |
Ambari页面UI的代码,用来用户与Ambari server交互的 |
ambari-views |
可视化工具的Web UI 框架代码 |
ambari-common |
Ambari-server 和Ambari-agent 共用的代码 |
ambari-metrics |
在Ambari所管理的集群中用来收集、聚合和服务Hadoop和系统计量 |
ambari-admin |
admin界面管理代码 |
ambari-project |
编译代码使用的公用代码 |
ambari-shell |
命令行代码包括shell及python |
ambari-funtest |
功能测试代码 |
ambari-logsearch |
日志管理代码 |
contrib |
可视化工具的代码及一些通用的工具代码 |
doc |
文档 |
代码视图
Ambari-Server目录结构
目录 |
描述 |
org.apache.ambari.server.api.services |
给web提供的接口方法,处理/api/v1/* 的请求 |
org.apache.ambari.server.controller |
对Ambari中cluster的管理处理,如新增host,更service、删除component等 |
org.apache.ambari.server.controller.internal |
主要存放ResourceProvider和PropertyProvider |
org.apache.ambari.service.orm.* |
对数据库的操作 |
org.apache.ambari.server.agent.rest |
处理与Agent的接口的入口方法 |
org.apache.ambari.security |
使用Spring Security来做权限管理 |
Ambari-web目录结构
目录 |
描述 |
app/ |
Web 核心代码. 包括Ember 的 views, templates, controllers, models, routes等代码,实际应用的代码 |
config.coffee |
Brunch 应用配置文件 |
package.json |
npm 包管理配置文件 |
test/ |
功能测试代码 |
vendor/ |
第三方代码,如:bootstrap、jquery等 |
Ambari-web/app目录结构
目录或文件 |
描述 |
assets/ |
模拟数据,可以用来做测试使用 |
controllers/ |
Ember框架中MVC的C层 |
data/ |
应用程序的元数据(UI元数据,服务器数据元数据等)可用来在开发过程中查看元数据的结构 |
mappers/ |
主要将服务器端JSON数据结构映射到客户端Ember模型的类 |
models/ |
Ember框架中MVC的M层. 使用Ember Data , 集群,服务,主机,警报等模型在这里定义 |
routes/ |
Ember路由定义,主要用来做应用程序中的各种页面重定向 |
styles/ |
Web的样式文件(less),最终会通过Brunch 编译到ambari-web/public/stylesheets/app.css文件中 |
views/ |
Ember框架中MVC中的V层。 包含应用程序的所有视图。 |
Templates/ |
视图使用的HTML模板。 通常一个视图将有一个模板文件。 |
App.js |
主程序 |
config.js |
javascript应用程序的主配置文件。 开发人员可以使用App.testMode属性等将应用程序保持在测试模式。 |
Locales |
国际化 |
Messages.js |
翻译表,程序中页面展示对应的翻译表 |
routter.js |
路由程序,主要用来做路由解析 |
Ambari-Server架构
1. 对外,Ambarii-Server提供ambari web,rest api,ambari shell三大方式操作机群
2. ambari将集群的配置、各个服务的配置等信息存在ambari server端的DB中(如postgresql)
3. ambari server与ambari agent的交流走RPC,即agent向server报告心跳,server将command通过respons发回给agent,agent本地执行命令,比如:agent端执行相应的python脚本
4. ambari有自己的一套监控、告警、镜像服务,以可插拔的形式供上层服务调用
Ambari-agent架构
ambari-agent是一个无状态的。其功能主要分两部分
1.采集所在节点的信息并且汇总发心跳汇报给ambari-server
2.处理ambari-server的执行请求。
(1)消息队列MessageQueue,或为ResultQueue。包括节点状态信息(包括注册信息)和执行结果信息,并且汇总后通过心跳发送给ambari-server
(2)操作队列ActionQueue。用于接收ambari-server返回过来的状态操作,然后能过执行器按序调用puppet或python脚本等模块完成任务
参考文章
https://blog.csdn.net/chengyuqiang/article/details/60963480
以上就是对Ambari架构和源代码结构的分析,下一篇我们将介绍如何编译Ambari源代码。
扫描二维码,关注BearData