微信搜索公众号: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.youkuaiyun.com/chengyuqiang/article/details/60963480
以上就是对Ambari架构和源代码结构的分析,下一篇我们将介绍如何编译Ambari源代码。
扫描二维码,关注BearData