Ambari架构参考(转)

#前言

Hadoop集群的管控一直是一个热门的话题,对于这样的一个应用场景,我所知道国内很早就有人研究并且取得不错的成绩,这就是EasyHadoop。它的功能主要有集群安装,管理,监控等功能,有兴趣的朋友可以百度,这位作者的博客有很详细的介绍。今天,我所要重点介绍的Apache的顶级项目,现在是大数据新贵Hortonworks公司在推进的项目Ambari,这款软件具有集群自动化安装、中心化管理、集群监控、报警等功能,使得安装集群从几天的时间缩短在几小时以内,运维人员从数十人降低到几人以内,极大的提高集群管理的效率。

Ambari介绍

Ambari是Hadoop分布式集群配置管理工具,是由hortonworks主导的开源项目,它已经成为了apache基金会的开源项目,已经成为Hadoop运维系统中的得力助手。

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,fecter等工具,还有它也依赖一些监控工具nagios和ganglia用于监控集群状况。其中:

puppet是分布式集群配置管理工具,也是典型的Server/Client模式,能够集中式管理分布式集群的安装配置部署,主要语言是ruby。

facter是用Python写的一个节点资源采集库,用于采集节点的系统信息,例如OS信息,由于ambari-agent 主要是用Python写的,因此用facter可以很好的采集到节点信息。

项目目录介绍

目录描述

ambari-serverAmbari的Server程序,主要管理部署在每个节点上的管理监控程序

Ambari-agent部署在监控节点上运行的管理监控程序

Contrib自定义第三方库

ambari-webAmbari页面UI的代码,作为用户与Ambari server交互的。

ambari-views用于扩展Ambari Web UI中的框架

Docs文档

ambari-commonAmbari-server 和Ambari-agent 共用的代码

Ambari系统架构

在ambari-server开放的Rest API中分为主要的两大类 API,其中一类为ambari-web提供监控管理服务,另一类用于与ambari-agent交互,接受ambari-agent向ambari-server发送心跳请求。Master模块接受API和Agent Interface的请求,完成ambari-server的集中式管理监控逻辑,而每个agent节点只负责所在节点的状态采集及维护工作。

Ambari-agent内部架构

Ambari-agent是一个无状态的,其功能分两部分:

采集所在节点的信息并且汇总发送心跳发送汇报给ambari-server。

处理ambari-server的执行请求。

因此它有两种队列:

(1)、消息队列Message Queue,或称为ResultQueue。包括节点状态信息(包括注册信息)和执行结果信息,并且汇总后通过心跳发送给ambari-server。

(2)、操作队列ActionQueue。用于接收ambari-server发送过来的状态操作,然后交给执行器调用puppet或Python脚本等模块执行任务。

Ambari-server内部架构

Ÿ  Live Cluster State:集群现有状态,各个节点汇报上来的状态信息会更改该状态;

Ÿ  Desired State:用户希望该节点所处状态,是用户在页面进行了一系列的操作,需要更改某些服务的状态,这些状态还没有在节点上产生作用;

Ÿ  Action State:操作状态,是状态改变时的请求状态,也可以看作是一种中间状态,这种状态可以辅助LiveCluster State向Desired State状态转变。

Ambari-server的Heartbeat Handler模块用于接收各个agent的心跳请求(心跳请求里面主要包含两类信息:节点状态信息和返回的操作结果),把节点状态信息传递给FSM状态机去维护着该节点的状态,并且把返回的操作结果信息返回给Action Manager去做进一步的处理。

Coordinator模块又可以称为API handler,主要在接收WEB端操作请求后,会检查它是否符合要求,stageplanner分解成一组操作,最后提供给ActionManager去完成执行操作。

因此,从上图就可以看出,Ambari-Server的所有状态信息的维护和变更都会记录在数据库中,用户做一些更改服务的操作都会在数据库上做一些相应的记录,同时,agent通过心跳来获得数据库的变更历史。

Ambari-web内部架构

Ambari-web使用了一个流行的前端Embar.js MVC框架实现,Embar.js是一个TodoMVC框架,它涵盖了现今典型的单页面应用(single page application)几乎所有的行为。

使用了nodejs

使用brunch 作为项目的构建管理工具

Brunch ,是一个超快的HTML5构建工具。它有如下功能:

(1)、编译你的脚本、模板、样式、链接它们。

(2)、将脚本和模板封装进common.js/AMD模块里,链接脚本和样式。

(3)、为链接文件生成源地图,复制资源和静态文件。

(4)、通过缩减代码和优化图片来收缩输出,看管你的文件更改。

(5)、并通过控制台和系统提示通知你错误。

Nodejs 是一个基于Chrome JavaScript运行时建立的一个平台,用来方便的搭建快速的易于扩展的网络应用,NodeJS借助事件驱动,非阻塞I/O模型变得轻量和高效,非常适合运行在分布式设备的数据密集型的实时应用。

Ambari-web 目录结构

目录或文件描述

app/主要应用程序代码。包括Ember中的view、templates、controllers、models、routes

config.coffeeBrunch应用程序生成器的配置文件

package.jsonNpm包管理配置文件

test/测试文件

vendor/Javascript库和样式表适用第三方库。

Ambari-web/app/

目录或文件描述

assets/静态文件

controllers/控制器

data/数据

mappers/JSON数据到Client的Ember实体的映射

modelsMVC中的Model

routes/路由器

styles样式文件

views试图文件

templates/页面模板

app.jsEmber主程序文件

config.js配置文件

Ambari-server

Ambari-server使用的jetty作为Servlet容器作为内嵌的java服务器,其中相关的代码在server/controller 下的AmbariServer.java中。 其中Session的管理似乎AmbariSessionManager 重写了SessionManager类

(1)、jetty 是一个开源的Servlet容器,它为基于java的web容器,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行的Java应用提供网络和web连接。

(2)、Google Guice 一个google的IOC容器

(3)、Spring

(4)、JAX-RS

Ambari-server依赖于 Ambari-Views 项目

包名描述

org.apache.ambari.server.api.services对web接口的入口方法,处理/api/v1/* 的请求

org.apache.ambari.server.controller对Ambari中cluster的管理处理,如新增host,更新service、删除component等

org.apache.ambari.service.orm.*对数据库的操作

org.apache.ambari.server.agent.rest处理与Agent的接口

org.apache.ambari.security是使用Spring Security来做权限管理

转自 http://m.blog.csdn.net/blog/shifenglov/42803283

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • Ambari介绍 Ambari是Hadoop分布式集群配置管理工具,是由hortonworks主导的开源项目,它已...
    mikeliuy阅读 3,059评论 1 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,591评论 18 139
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,894评论 2 89
  • Apache HAWQ是目前社区比较火的一种SQL-on-Hadoop方案,由Pivotal公司开发并贡献给了Ap...
    小白_18M阅读 12,570评论 6 13
  • 不知从何时起,每到高考还有高考录取之际,各个媒体就开始讨论“寒门越来越难出贵子”,这就像浙江卫视每年寒暑假的《...
    玲兮001阅读 546评论 2 0