Ambari架构源码解析

1.Ambari介绍

  Apache Ambari是一种基于Web的工具,支持Apache Hadoop集群的供应、管理和监控。Ambari已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop和Hcatalog等。

1.1 基本概念

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等;

1.2 基本组件

Ambari 可以分为 5个大的组件,分别是是 Ambari-server 、 Ambari-web 、 Ambari-agent 、 Ambari-metrics-collectorAmbari-metrics-monitor 。

1. 在集群的每一台机器上都会部署 Ambari-agent 程序。 Agent 主要负责接收来着 Server 端的命令,这些命令可以是安装、启动、停止 Hadoop 集群上的某一服务。同时, agent 端需要向 Ambari-server 端上 报命令执行的结果,是执行成功还是失败。 

2. Ambari-Server 提供 REST 接口给Agent 和 Web 访问,用户甚至可以不用界面,而是通过 curl 命令来操控集群。 

3. Ambari-metric-collector和 Ambari-metrics-monitor 是收集群中组件 metrics 的模块。

1.3 相关技术

Ambari充分利用了一些已有的优秀开源软件,巧妙地把它们结合起来,使其在分布式环境中做到了集群式服务管理能力、监控能力、展示能力,这些优秀的开源软件有: 
(1)agent端,采用了puppet管理节点。 
(2)在web端,采用ember.js作为前端MVC框架和NodeJS相关工具,用handlebars.js作为页面渲染引擎,在CSS/HTML方面还用了Bootstrap框架。 
(3)在Server端,采用了Jetty、Spring、JAX-RS等。 
(4)同时利用了Ganglia、Nagios的分布式监控能力。

Ambari架构采用的是Server/Client的模式,主要由两部分组成:ambari-agent和ambari-server。ambari依赖其它已经成熟的工具,例如其ambari-server 就依赖python,而ambari-agent还同时依赖ruby, puppet,facter等工具,还有它也依赖一些监控工具nagios和ganglia用于监控集群状况。 
其中: 
1. puppet是分布式集群配置管理工具,也是典型的Server/Client模式,能够集中式管理分布式集群的安装配置部署,主要语言是ruby。 
2. facter是用python写的一个节点资源采集库,用于采集节点的系统信息,例如OS信息,主机信息等。由于ambari-agent主要是用python写的,因此用facter可以很好地采集到节点信息。

2. Ambari项目目录结构

2.1 总体目录

ambari-server Ambari的Server程序,主要管理部署在每个节点上的管理监控程序
ambari-agent 部署在监控节点上运行的管理监控程序
ambari-web Ambari页面UI的代码,作为用户与Ambari server交互的。
ambari-views 用于扩展Ambari Web UI中的框架
ambari-common Ambari-server 和Ambari-agent 共用的代码
ambari-metrics 在Ambari所管理的集群中用来收集、聚合和服务Hadoop和系统计量
contrib 自定义第三方库
docs 文档

   

2.2 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来做权限管理

每一种Resource都对应一个ResourceProvider,如下表所示:

Resource.Type ResourceProvider
Workflow WorkflowResourceProvider
Job JobResourceProvider
TaskAttempt TaskAttemptResourceProvider
View ViewResourceProvider
ViewInstance ViewInstanceResourceProvider
Blueprint BlueprintResourceProvider
Cluster ClusterResourceProvider
Service ServiceResourceProvider
Component ComponentResourceProvider
Host HostResourceProvider
HostComponent HostComponentResourceProvider
Configuration ConfigurationResourceProvider
Action ActionResourceProvider
Request RequestResourceProvider
Task TaskResourceProvider
User UserResourceProvider
Stack StackResourceProvider
StackVersion StackVersionResourceProvider
StackService StackServiceResourceProvider
StackServiceComponent StackServiceComponentResourceProvider
StackConfiguration StackConfigurationResourceProvider
OperatingSystem OperatingSystemResourceProvider
Repository RepositoryResourceProvider
RootService RootServiceResourceProvider
RootServiceComponent RootServiceComponentResourceProvider
RootServiceHostComponent RootServiceHostComponentResourceProvider
ConfigGroup ConfigGroupResourceProvider
RequestSchedule RequestScheduleResourceProvider  

猜你喜欢

转载自www.cnblogs.com/mymelody/p/9358283.html
今日推荐