不多說,直接上干貨!
1.什么是Ambari?
2.Ambari項目是由哪幾部分構成的?
3.Ambari系統架構是如何組成的?
前言
Hadoop集群的管控一直是一個熱門的話題,對於這樣的一個應用場景,我所知道國內很早就有人研究並且取得不錯的成績,這就是EasyHadoop。它的功能主要有集群安裝,管理,監控等功能,有興趣的朋友可以百度,這位作者的博客有很詳細的介紹。今天,我所要重點介紹的Apache的頂級項目,現在是大數據新貴Hortonworks公司在推進的項目Ambari,這款軟件具有集群自動化安裝、中心化管理、集群監控、報警等功能,使得安裝集群從幾天的時間縮短在幾小時以內,運維人員從數十人降低到幾人以內,極大的提高集群管理的效率。
Ambari介紹
Ambari是Hadoop分布式集群配置管理工具,是由hortonworks主導的開源項目,它已經成為了apache基金會的開源項目,已經成為Hadoop運維系統中的得力助手。
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
|
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來做權限管理
|
歡迎大家,加入我的微信公眾號:大數據躺過的坑 人工智能躺過的坑
同時,大家可以關注我的個人博客:
http://www.cnblogs.com/zlslch/ 和 http://www.cnblogs.com/lchzls/ http://www.cnblogs.com/sunnyDream/
詳情請見:http://www.cnblogs.com/zlslch/p/7473861.html
人生苦短,我願分享。本公眾號將秉持活到老學到老學習無休止的交流分享開源精神,匯聚於互聯網和個人學習工作的精華干貨知識,一切來於互聯網,反饋回互聯網。
目前研究領域:大數據、機器學習、深度學習、人工智能、數據挖掘、數據分析。 語言涉及:Java、Scala、Python、Shell、Linux等 。同時還涉及平常所使用的手機、電腦和互聯網上的使用技巧、問題和實用軟件。 只要你一直關注和呆在群里,每天必須有收獲
對應本平台的討論和答疑QQ群:大數據和人工智能躺過的坑(總群)(161156071)






