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的更多相关文章

  1. Ambari概览

    文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/7886195.html  转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点, ...

  2. 国内Hadoop相关的开源项目

    1.BC-Hadoop:中国移动Hadoop工具链打包 https://github.com/cmri/bc-hadoop2.0 孵化阶段,将成为一个通用的开源Hadoop平台 2.BC-BSP:中国 ...

  3. react-native学习笔记--首次安装apk到小米5报错

    本文直接引用大神文档: [WINDOWS环境 React Native初识]com.android.ddmlib.InstallException: Failed to establish sessi ...

  4. python 全栈开发,Day122(人工智能初识,百度AI)

    一.人工智能初识 什么是智能? 我们通常把人成为智慧生物,那么”智慧生物的能力”就是所谓的”智能”我们有什么能力?听,说,看,理解,思考,情感等等 什么是人工智能? 顾名思义就是由人创造的”智慧能力” ...

  5. 初识Nginx及编译安装Nginx

    初识Nginx及编译安装Nginx 环境说明: 系统版本    CentOS 6.9 x86_64 软件版本    nginx-1.12.2 1.什么是Nginx? 如果你听说或使用过Apache软件 ...

  6. 【初识Spring】对象(Bean)实例化及属性注入(xml方式)

    title: [初识Spring]对象(Bean)实例化及属性注入(xml方式) date: 2018-08-29 17:35:15 tags: [Java,Web,Spring] --- #初识S ...

  7. Android动画效果之初识Property Animation(属性动画)

    前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...

  8. 初识Hadoop

    第一部分:              初识Hadoop 一.             谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...

  9. python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)

    一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...

随机推荐

  1. 后门技术和Linux LKM Rootkit详解

    2010-01-15 10:32 chinaitlab chinaitlab 字号:T | T 在这篇文章里, 我们将看到各种不同的后门技术,特别是 Linux的可装载内核模块(LKM). 我们将会发 ...

  2. ORA-12537: TNS:connection closed错误处理过程

    https://blog.csdn.net/mchdba/article/details/50018571

  3. IEEEXtreme 10.0 - N-Palindromes

    这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - N-Palindromes 题目来源 第10届IEEE极限编程大赛 https://www.hackerra ...

  4. 【PAT】1014. 福尔摩斯的约会 (20)

    1014. 福尔摩斯的约会 (20) 大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hy ...

  5. Apache配置实现日志按天分割并删除指定几天前的日志

    Apache日志默认情况下是一周切割一次,由于访问量大的时候日志的文件还是比较大的,同时也不利于管理员对日志的分析处理.于是尝试对Apache日志设置按天分割,并通过计划任务执行删除几天的日志. 配置 ...

  6. 在C#中使用CURL

    private string args = "";          /// <summary>         /// 参数         /// </sum ...

  7. c++ 单例模式研究

    一篇博文:C++ 单例模式的几种实现研究 中 看到的几段代码 懒汉模式 class Singleton { public: static Singleton* GetInstance() { if ( ...

  8. 【C++】指针的引用及面向对象

    指针的引用 #include <iostream> using namespace std; struct Teacher { ]; int age; }; int getTeacher( ...

  9. 初拾Java(问题一:404错误,页面找不到)

    做测试尤其是想走自动化测试之路的人,怎么可以不会码代码?!怒了... 再次开始拾起Java,坚持坚持!!! 刚写了一个JSP页面,想在Myeclipse里面跑来试试,结果搞了半天出现以下错误: 试着去 ...

  10. 图形管线之旅 Part3

    原文:<A trip through the Graphics Pipeline 2011> 翻译:往昔之剑   转载请注明出处   此时,我们一路上通过多个驱动层和命令处理器将draw ...