本文主要是介绍初识小米Minos,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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总结的脑图
原文地址:点击打开链接
这篇关于初识小米Minos的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!