初识小米Minos

1. Minos框架的基本介绍

  小米公司不仅仅在搞手机以及MIUI rom的研发工作,云计算、虚拟化以及Hadoop也是小米现在在搞的东西,小米与2012年下半年成立了自己的Hadoop团队。介绍小米Minos,Hadoop部署、监控系统,目前小米将此系统开源在github上面可以下载来获取。Minos的logo:

 

1Minos 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大组成部分如下图所示:

2Minos 架构

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里面最复杂的功能组件了,整个功能组件的基本工作原理如下:

 

3Owl架构与工作原理

  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的使用、具体的工作原理等。后续一张脑图来进行小结:

 

4Minos总结的脑图

posted @ 2013-11-05 11:05  诶露基基(LGG)  阅读(3807)  评论(0编辑  收藏  举报