1. Minos框架的基本介紹
小米公司不僅僅在搞手機以及MIUI rom的研發工作,雲計算、虛擬化以及Hadoop也是小米現在在搞的東西,小米與2012年下半年成立了自己的Hadoop團隊。介紹小米Minos,Hadoop部署、監控系統,目前小米將此系統開源在github上面可以下載來獲取。Minos的logo:
圖1:Minos logo
依然是小米經典的橙色白色組合的樣式,顯目耀眼。下面將針對Minos進行簡單的介紹。(網上有武老師的視頻,手把手教你玩轉Minos)
1.1. 基本介紹
Minos使用python語言(python開發東西應該很快,越來越多的團隊都喜歡用這種腳本語言了,ruby,python)開發,內部利用到了多個python的開源的模塊,用於Hadoop集群的部署和監控。開發用來管理小米公司的Hadoop、HBase以及ZooKeeper集群。Minos可以輕易的進行擴展,以便支持其他的系統,目前的版本可以用來支持HDFS、YARN、Impala。
1.2. Hadoop部署、監控方案的相關研究
Hadoop自動部署與監視的系統很多公司以及開源的社區都在做,Minos絕不是第一個提出來進行整個集群的部署與監控的。大型公司由於有眾多的集群節點,必須有一個自動化的、集中的系統部署與監控的解決方案。當前這些方案無非就是開源和不開源的。關於開源方案主要就是Apache Ambari,而不開源的有:Cloudera Manager、微軟的Autopilot、谷歌的Borg、以及騰訊公司的Torca。當然,Hadoop自帶的系統管理腳本也是可以用的,例如start-all.sh。
1.2.1. 系統原生腳本
很小規模的集群使用原生腳本管理還是可以的,比較方便快捷,適合做,但是當集群規模稍大時,便力不從心了。
1.2.2. Cloudera Manager(簡稱cm)
Cloudera公司在Hadoop方面走的很前沿,Cloudera Manager就是一個Hadoop集群部署與監控的解決方案。cm本身是一個商業軟件,但是擁有一個免費版,可以免費支持50個節點。
cm在進行部署時,將Hadoop部署為系統級別服務,也就是一個主機不能作為多個實例來使用,僅僅是單個實例。由於商業軟件的黑盒特性,在部署以及使用的過程中可能會發生的錯誤,對於用戶是不方便定位的。另外就是cm本身專門服務於Hadoop的生態圈,支持Hadoop原生的一些擴展,如果企業想要再集成進入Hadoop中一些其他的服務組件就比較困難了。另外本身也沒有包管理的系統,比較方便使用官方發布包,而不容易使用團隊修改后的一些包就不好集成了,另外不支持Hadoop Metrics數據的搜集與展示。
1.2.3. Apache Ambari
Apache的一個孵化項目,不是非常的成熟。功能與cm類似,免費開源。通過Ambari部署Hadoop需要手動配置免密碼ssh,當集群規模較大以后也比較繁瑣。對比cm,Ambari的一個優點是支持Metrics數據的搜集,這點是通過Ganglia來做的。
1.2.4. 商業公司方案
商業公司的方案微軟的Autopilot,谷歌的Borg,騰訊的Torca,也是現有的集成部署方案了。
小米在做Minos也參考了這些大廠商以及開源的方案。
1.3. 組件簡介
組件主要包括4個部分:Client、Owl、Supervisor、Tank,這個小結將分別對這四大塊兒組件進行基本介紹。4大組成部分如下圖所示:
圖2:Minos 架構
1.3.1. Client(客戶端)
用戶通過Client組件對整個Minos系統進行使用。Client在Minos的角色扮演為集群管理的入口,就是一個命令行工具。使用Client可以完成一系列諸如安裝,啟動,重啟停止Hadoop服務的操作。
v 組件需求:
1 Pexpect。Pexpect是一個自動控制的Python模塊,可以用來ssh、ftp、passwd、telnet等命令行進行自動交互。使用這個也是因為shell腳本處理交互的能力較差。
2 Jdk。部署與啟動停止Hadoop服務最終會變成Java命令,JDK是必須的。
3 ConfigObj。python用於讀寫配置文件的一個庫,讀寫用戶在Minos里面配置的文件。
v 通常流程:
一般用Client主要就是安裝和管理Hadoop。一般完成以下組件的部署:1、Tank,2、Supervisor,3、配置deploy.cfg,4、配置Zookeeper,5、配置HFDS。
1.3.2. Tank(包管理工具)
Tank是個包管理器。由於大公司會對Hadoop的各個組件進行相應的修改改,以及再部署集成。因此需要一個包管理工具完成這個任務。將需要部署的,修改過的包都扔到Tank中,在集群部署的時候,統一從Tank中進行分發。Tank可以看成一個包的倉庫。
v 組件需求
Django。Django,Python的一個web框架,Minos通過Django來完成展示和管理包的功能。
v Tank路徑介紹
data/:存放包。
package_server/:django包管理器服務器的目錄。
sqlite/:數據庫目錄。
static/:靜態資源目錄。
tank/:django目錄。
template/:web頁面模版目錄。
1.3.3. Supervisor(進程管理與監控)
Supervisor本身就是一個開源軟件,一個c/s系統。允許用戶對Linux操作系統進行進程的監控與管理。小米基於Supervisor進行二次開發,用於支持Minos。
Supervisor一個特點就是不再像Ambari對集群節點進程進行管理時依賴ssh方式來完成,它基於xmlrpc進行通信。
v 組件需求
1 setuptools。用與自動安裝python所需要的模塊。(關於這個組件的作用暫時沒理解)
2 meld3。meld3用於對xml/html進行格式化,一個HTML/XML的模版引擎。輸入xml,將xml按照需求格式化,輸出HTML完成頁面的展示功能。
3 elementtree。python中用於解析和生成xml的工具。
4 pexpect。由於涉及到進程的管理了,因此肯定需要自動化腳本處理。
1.3.4. Owl(集群Metrics信息的搜集、存儲與展示)
Owl是一個Hadoop的監控系統,從服務器以JMX的方式進行數據采集與展示,另外還提供一些關於集群健康狀況的警告機制等。Owl應該是Minos里面最復雜的功能組件了,整個功能組件的基本工作原理如下:
圖3:Owl架構與工作原理
Owl Collector不定期的把Hadoop集群產生的Metrics數據搜集起來,並存入Mysql數據庫。這個存儲的方式是覆蓋存儲,存儲時直接會將之前存儲的數據覆蓋掉。Dashboard提供一個Web服務,用於訪問Mysql中保存的Metrics數據信息。而Opentsdb Collector通過Dashboard將Mysql中的數據存儲到Opentsdb中去,其實就是Hbase。Opentsdb這個東西本身是做在HBASE之上的,一個時間序列的數據庫,使得存儲的數據容易獲取以及圖表化的方式進行展示。Hbase中就存儲了所有的集群的Metrics歷史數據。當用戶查看存儲的歷史數據時,就通過Opentsdb進行數據訪問並最終通過Dashboard呈現給用戶。
v 組件需求
1 mysql、mysql-python。瞬時數據需要用mysql進行存儲。
2 django。web框架。
3 twisted。一個網絡編程通用模塊集合,用於執行各種形式的網絡編程任務,它改變了用Python標准庫不易於輕松地進行網絡編程的局面。
4 dbutils。數據庫的一個鏈接工具,在多線程環境下完成數據庫連接的管理工作。
1.4. 小結
對Minos的基本功能和特性進行了介紹,后續有空閑時間的話講會繼續深入Minos的使用、具體的工作原理等。后續一張腦圖來進行小結:
圖4:Minos總結的腦圖