初识小米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的更多相关文章
- Ambari概览
文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/7886195.html 转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点, ...
- 国内Hadoop相关的开源项目
1.BC-Hadoop:中国移动Hadoop工具链打包 https://github.com/cmri/bc-hadoop2.0 孵化阶段,将成为一个通用的开源Hadoop平台 2.BC-BSP:中国 ...
- react-native学习笔记--首次安装apk到小米5报错
本文直接引用大神文档: [WINDOWS环境 React Native初识]com.android.ddmlib.InstallException: Failed to establish sessi ...
- python 全栈开发,Day122(人工智能初识,百度AI)
一.人工智能初识 什么是智能? 我们通常把人成为智慧生物,那么”智慧生物的能力”就是所谓的”智能”我们有什么能力?听,说,看,理解,思考,情感等等 什么是人工智能? 顾名思义就是由人创造的”智慧能力” ...
- 初识Nginx及编译安装Nginx
初识Nginx及编译安装Nginx 环境说明: 系统版本 CentOS 6.9 x86_64 软件版本 nginx-1.12.2 1.什么是Nginx? 如果你听说或使用过Apache软件 ...
- 【初识Spring】对象(Bean)实例化及属性注入(xml方式)
title: [初识Spring]对象(Bean)实例化及属性注入(xml方式) date: 2018-08-29 17:35:15 tags: [Java,Web,Spring] --- #初识S ...
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
- python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)
一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...
随机推荐
- SilverLight高亮显示文本
文笔不好,就长话短说,就是想实现这样的效果,比如在成都二环路南一段一号附一号凤舞九天网吧 ,搜索 二环路 九天网吧 然后结果中高亮显示. <local:TextBlockHighLight Te ...
- Linux文档时间戳查看和修改——stat
查看文件时间戳命令:stat awk.txtFile: `awk.txt'Size: 20 Blocks: 8 IO Block: 4096 regular fileDevice: 801h/2 ...
- luogu P1549 棋盘问题(2) 题解
luogu P1549 棋盘问题(2) 题解 题目描述 在\(N * N\)的棋盘上\((1≤N≤10)\),填入\(1,2,-,N^2\)共\(N^2\)个数,使得任意两个相邻的数之和为素数. 例如 ...
- 常用对称加密算法(DES/AES)类(PHP)
看注释,啥也不说了,欢迎各种跨平台测试! /** * 常用对称加密算法类 * 支持密钥:64/128/256 bit(字节长度8/16/32) * 支持算法:DES/AES(根据密钥长度自动匹配使用: ...
- JS~jwPlayer为js预留的回调方法大总结
对于一个成功的产品,它是对外封闭的,但又是对外开放的,这句话并不矛盾,让我来说一下,说它对外封闭是因为它本身的代码不允许你去修改,而说它开放,是因为它为我们定义了很多API,或者叫回调方法,对于jwp ...
- ionic1.3.3 下拉刷新 上拉加载更多
源文地址:https://blog.csdn.net/kingcruel/article/details/67638880 再次感谢原作者 html <ion-pane> <ion- ...
- 三十三 StringIO和BytesIO
StringIO 很多时候,数据读写不一定是文件,也可以在内存中读写. StringIO顾名思义就是在内存中读写str. 要把str写入StringIO,我们需要先创建一个StringIO,然后,像文 ...
- 分页查询和redis
问题 我在做论坛的是时候遇到了如下的问题.论坛里可以有很多的主题topic,每个topic对应到很多回复reply.现在要查询某个topic下按照replyTime升序排列的第pageNo页的repl ...
- logstash通过tcp收集日志
(1)标准输入输出tcp模块 1.修改配置文件 #vim /etc/logstash/conf.d/tcp.conf input { tcp { port => "5600" ...
- 关于字体剥离和精简工具 FontSubsetGUI 和 FontPruner 的比较。
在 Unity 中制作游戏时对动态字体的剥离和精简是现在常用的手段,现在有两篇博客是大家阅读和参照较多的,分别是 如何精简Unity中使用的字体文件 和 FontPruner 字体精简工具.他们各自提 ...