美文网首页Ambari大数据
【Hadoop】Ambari架构详解(转)

【Hadoop】Ambari架构详解(转)

作者: mikeliuy | 来源:发表于2017-03-23 16:01 被阅读535次

    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-server Ambari的Server程序,主要管理部署在每个节点上的管理监控程序
    ambari-agent 部署在监控节点上运行的管理监控程序
    contrib 自定义第三方库
    ambari-web Ambari页面UI的代码,作为用户与Ambari server交互的。
    ambari-views 用于扩展Ambari Web UI中的框架
    docs 文档
    ambari-common Ambari-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.coffee runch应用程序生成器的配置文件
    package.json Npm包管理配置文件
    test/ 测试文件
    vendor/ Javascript库和样式表适用第三方库。

    Ambari-web/app/

    目录或文件 描述
    assets/ 静态文件
    controllers/ 控制器
    data/ 数据
    mappers/ JSON数据到Client的Ember实体的映射
    models MVC中的Model
    routes/ 路由器
    styles 样式文件
    views 试图文件
    templates/ 页面模板
    app.js Ember主程序文件
    config.js 配置文件

    Ambari-server

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

    • jetty 是一个开源的Servlet容器,它为基于java的web容器,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行的Java应用提供网络和web连接。
    • Google Guice 一个google的IOC容器
    • Spring
    • 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

    相关文章

      网友评论

        本文标题:【Hadoop】Ambari架构详解(转)

        本文链接:https://www.haomeiwen.com/subject/przznttx.html