Ambari 2.7.3架构详情

别说谁变了你拦得住时间么 提交于 2019-12-12 04:29:49

Ambari 2.7.3架构详情

Ambari简介:

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

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五大组件

Ambari-server 、 Ambari-web 、 Ambari-agent 、 Ambari-metrics-collector 和 Ambari-metrics-monitor 。

作用:

  1. 在集群的每一台机器上都会部署 Ambari-agent 程序。 Agent 主要负责接收来着 Server 端的命令,这些命令可以是安装、启动、停止 Hadoop 集群上的某一服务。同时, agent 端需要向 Ambari-server 端上 报命令执行的结果,是执行成功还是失败。
  2. Ambari-Server 提供 REST 接口(接口所在包:ambari-server\src\main\java\org\apache\ambari\server\api\services)给Agent 和 Web 访问,用户甚至可以不用界面,而是通过 curl 命令来操控集群。
  3. Ambari-metric-collector和 Ambari-metrics-monitor 是收集群中组件 metrics 的模块。

Ambari所用技术

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可以很好地采集到节点信息。

Ambari项目目录结构

项目目录 作用
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 文档

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,如下所示:
在这里插入图片描述

ambari-server 详解

ambari-server是一个有状态的,它维护着自己的一个有限状态机FSM,同时这些状态机存储在数据库中,默认数据库为postgressql数据库。
 在这里插入图片描述

  1. Ambarii-Server提供ambari web,rest api,ambari shell三大方式操作机群;
  2. ambari将集群的配置、各个服务的配置等信息存在ambari server端的DB中;
  3. ambari server与ambari agent的交流走RPC,即agent向server报告心跳,server将command通过respons发回给agent,agent本地执行命令,比如:agent端执行相应的python脚本;
  4. ambari有自己的一套监控、告警、镜像服务,以可插拔的形式供上层服务调用;

在这里插入图片描述
 Ambari-Server是一个WEB Server,提供统一的REST API接口,同时向web和agent开放了两个不同的端口(默认前者是8080, 后者是8440或者8441)。它是由Jetty Server容器构建起来的,通过Spring Framework构建出来的WEB服务器,其中大量采用了google提供的Guice注解完成spring框架所需要的注入功能,REST服务由JAX-RS标准来实现。

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

如下图所示,server端主要维护三类状态:

  1. Live Cluster State:集群现有状态,各个节点汇报上来的状态信息会更改该状态;
  2. Desired State:用户希望该节点所处状态,是用户在页面进行了一系列的操作,需要更改某些服务的状态,这些状态还没有在节点上产生作用;
  3. Action State:操作状态,是状态改变时的请求状态,也可以看作是一种中间状态,这种状态可以辅助Live Cluster State向Desired State状态转变。

Ambari-server的Heartbeat Handler模块用于接收各个agent的心跳请求(心跳请求里面主要包含两类信息:节点状态信息和返回的操作结果),把节点状态信息传递给FSM状态机去维护着该节点的状态,并且把返回的操作结果信息返回给Action Manager去做进一步的处理。
Coordinator模块又可以称为API handler,主要在接收WEB端操作请求后,会检查它是否符合要求,stage planner分解成一组操作,最后提供给Action Manager去完成执行操作。
在这里插入图片描述
 因此,从上图就可以看出,Ambari-Server的所有状态信息的维护和变更都会记录在数据库中,用户做一些更改服务的操作都会在数据库上做一些相应的记录,同时,agent通过心跳来获得数据库的变更历史。

参考博客:https://www.cnblogs.com/mymelody/p/9358283.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!