問題導讀 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系統架構
在ambari-server開放的Rest API中分為主要的兩大類 API,其中一類為ambari-web提供監控管理服務,另一類用於與ambari-agent交互,接受ambari-agent向ambari-server發送心跳請求。Master模塊接受API和Agent Interface的請求,完成ambari-server的集中式管理監控邏輯,而每個agent節點只負責所在節點的狀態采集及維護工作。
<ignore_js_op>
![]()
Ambari-agent內部架構
Ambari-agent是一個無狀態的,其功能分兩部分:
采集所在節點的信息並且匯總發送心跳發送匯報給ambari-server。
處理ambari-server的執行請求。
因此它有兩種隊列:
(1)、消息隊列Message Queue,或稱為ResultQueue。包括節點狀態信息(包括注冊信息)和執行結果信息,並且匯總后通過心跳發送給ambari-server。
(2)、操作隊列ActionQueue。用於接收ambari-server發送過來的狀態操作,然后交給執行器調用puppet或Python腳本等模塊執行任務。
<ignore_js_op>
![]() Ambari-server內部架構
Ÿ Live Cluster State:集群現有狀態,各個節點匯報上來的狀態信息會更改該狀態;
Ÿ Desired State:用戶希望該節點所處狀態,是用戶在頁面進行了一系列的操作,需要更改某些服務的狀態,這些狀態還沒有在節點上產生作用;
Ÿ Action State:操作狀態,是狀態改變時的請求狀態,也可以看作是一種中間狀態,這種狀態可以輔助LiveCluster State向Desired State狀態轉變。
<ignore_js_op>
![]()
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 目錄結構
Ambari-web/app/
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 項目
轉自 http://m.blog.csdn.net/blog/shifenglov/42803283 |