004-Ambari架构及源码结构分析

    微信搜索公众号: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

文档

代码视图

004-Ambari架构及源码结构分析

 

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架构

004-Ambari架构及源码结构分析

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架构

004-Ambari架构及源码结构分析

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

004-Ambari架构及源码结构分析