Ambari架構及安裝

  

很少說,直接上乾貨!html

 

 

  1.什麼是Ambari?
  2.Ambari項目是由哪幾部分構成的?
  3.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-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內部架構java

   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
Brunch應用程序生成器的配置文件
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類。
(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來作權限管理


 
 
 
 
 
 
 

 

 

歡迎你們,加入個人微信公衆號:大數據躺過的坑        人工智能躺過的坑
 
 
 

同時,你們能夠關注個人我的博客node

   http://www.cnblogs.com/zlslch/   和     http://www.cnblogs.com/lchzls/      http://www.cnblogs.com/sunnyDream/   python

   詳情請見:http://www.cnblogs.com/zlslch/p/7473861.htmlios

 

  人生苦短,我願分享。本公衆號將秉持活到老學到老學習無休止的交流分享開源精神,匯聚於互聯網和我的學習工做的精華乾貨知識,一切來於互聯網,反饋回互聯網。
  目前研究領域:大數據、機器學習、深度學習、人工智能、數據挖掘、數據分析。 語言涉及:Java、Scala、Python、Shell、Linux等 。同時還涉及日常所使用的手機、電腦和互聯網上的使用技巧、問題和實用軟件。 只要你一直關注和呆在羣裏,天天必須有收穫web

 

      對應本平臺的討論和答疑QQ羣:大數據和人工智能躺過的坑(總羣)(161156071) 數據庫

 

 

 

 

 

 

 

 

 

 

 

 

相關文章
相關標籤/搜索