ambari深入学习(iii)-开源使用及其改进思考

felixzh felixzh     2022-12-12     286

关键词:

Ambari采用的不是一个新的思想和架构,也不是完成了软件的新的革命,而是充分利用了一些已有的优秀开源软件,巧妙地把它们结合起来,使其在分布式环境中做到了集群式服务管理能力、监控能力、展示能力。这些优秀开源软件有:

  1. 在agent端,采用了puppet管理节点;
  2. 在Web端,采用了ember.js作为前端的MVC构架和NodeJS相关工具,用handlebars.js作为页面渲染引擎,在CSS/HTML方面还用了Bootstrap 框架;
  3. 在Server端,采用了Jetty, Spring,Jetty,JAX-RS等;
  4. 同时利用了Ganglia,Nagios的分布式监控能力。

一、Puppet

在Agent节点上,它所有的状态更改操作,都是通过Puppet来完成。Agent相关软件包的安装部署是由python完成,Agent端的包升级操作由Python和Puppet组合完成。例如,如果在页面上进行启动HDFS服务,那么最终在某个Ambari-Agent端会执行类似如下命令:

Shell代码  技术图片
  1. /usr/lib/ambari-agent/lib/puppet-2.7.9/bin/puppet apply --confdir=/var/lib/ambari-agent/puppet --detailed-exitcodes /var/lib/ambari-agent/data/site-83.pp  

其中site-83.pp 是manifestGenerator.generateManifest方法产生的puppet脚本文件,这个文件里主要完成一x些xxx-site.xml文件的配置工作,最后几行是完成puppet启动namenode的执行逻辑。

Puppet代码  技术图片
  1. #04.09.2013 15:52:26  
  2. import ‘/var/lib/ambari-agent/puppet/modules/hdp/manifests/*.pp‘  
  3.   
  4. # 省略一堆import...  
  5. # 省略一堆xxx-site.xml里面的参数配置项...  
  6.   
  7. $hadoop_pid_dir_prefix = ‘/var/run/hadoop‘  
  8. $zookeeper_sessiontimeout = ‘60000‘  
  9. $dfs_include = ‘dfs.include‘  
  10. #执行节点 默认  
  11. node /default/   
  12. # 共分两步  
  13.  stage1 : -> stage2 :     
  14. #第一步是 准备启动阶段,进行一系列的检查 和配置更新  
  15. class ‘hdp‘: stage => 1  
  16. # 第二步是 执行namenode的启动工作。  
  17. class ‘hdp-hadoop::namenode‘: stage => 2, service_state => running  
  18.   

 二、Ember.JS

自从Node.JS出来之后, JavaScript就变得更加神奇了。在前端可以控制页面展示,在后台可以当作服务器。尤其在前端的迅猛发展,不断散发出其无穷无尽的魅力,难怪有人说不懂点JS就不是纯正的攻城师。

Ember.JS是在浏览器前端构建的JS MVC框架,简单易用。它需要你创建一个Ember.Application实例,这个实例里有许多动态对象,MVC的功能就是通过这些动态对象之间相互交互来完成。

Js代码  技术图片
  1. // Creates an application instance.  
  2. App = Ember.Application.create(  
  3.     LOG_TRANSITIONS: true  
  4. );  

具体如何使用,请下载本文附件

三、Nagios & Ganglia的使用

如果要观看漂亮的监控图,它就需要依赖nagios和ganglia了,一旦安装成功,ambari-server就直接用http请求的方式向nagios和ganglia请求数据。

ganglia有直接的请求json数据的地址,格式如下:

http://localhost/ganglia//graph.php?g=load_report&json=true

nagios没有直接请求数据的功能,因此ambari实现了一段php代码用来读取服务的json数据,请求地址如下:

http://localhost/ambarinagios/nagios/nagios_alerts.php?q1=alerts&alert_type=all

 

四、Ambari-Server中的伪“插件”机制

Ambari-Server提供了多种类型的操作和服务,不同的操作对应不同的BaseProvider实现类和Definition实现类。如果要添加新的操作,就要依次实现对应Provider和Definition。这些操作类会统一加载进来。详情可以查看相关类的代码,例如:org.apache.ambari.server.controller.internal.AbstractControllerResourceProvider和org.apache.ambari.server.api.resources.ResourceInstanceFactoryImpl。这种实现机制在Ambari-Server这一层有点类似把服务当作插件来完成,但是也没有完全做到插件那么灵活,只需要实现某些类,配置某些参数就可以实现一个服务或操作。

 

五、改进思考

熟悉完Ambari的架构,运行逻辑和一些开源软件后,让我想到Hadoop的使用习惯选择,及其Hadoop 1.x 和Hadoop 2.x+的差别。

 

5.1. “Yarn”化?

Hadoop为了解决计算模型多样化的问题,能够在同一存储系统上实现多种计算模型,Hadoop 2.x+添加了Yarn框架。准确地说,Yarn框架是那些计算模型的共性部分(控制管理部分)抽象出来,产生出一个新的通用的计算管理控制器。在Hadoop 1.x 中只有MapReduce框架,现在常称之为MapReduce V1。Hadoop 2.x+把计算模型的计算部分和控制部分分离开来,把控制部分交给Yarn,把计算部分交给各个计算模型实现(MapReduce模型实现就成为了MapReduce V2)。同时可以在Yarn上实现其它计算模型,例如:实时计算模型Storm,图计算模型BSP。

 

 想一想Ambari现在只能管理着Hadoop及其生态系统,如果需要其管理监控Storm集群,显然现在无法达到。对于不同服务,例如无论是hadoop服务还是storm服务,都有着其共性部分,把其共性部分单独抽取出来,形成一个组件,然后运维人员只需要实现其具体操作。这样一来Ambari又是一款真正伟大的产品。

 

5.2. 做到简单的手动安装升级?

有人会说,Ambari现在都强大到能做到自动部署升级,那么就很容易做到手动部署升级的?还有人说,既然都已经自动部署了,为什么还要手动部署呢?

 

5.3. 做到用自己已经装好的hadoop集群?

现在ambari只能从头开始,安装自己的hadoop版本。如果现在已经有了hadoop集群,那么ambari就很难支持了。如果把ambari的多种功能进行分解,形成一组互相衔接的模块,那就更容易自定义hadoop集群。对于系统工程师来说,添加一点麻烦是能够接受的。

深入理解伙伴算法及其改进

...伙伴算法的优缺点详细给我讲了一下,发现这个算法值得深入研究一波~看了很多资料,下面整理资料,然后谈谈自己的理解。 体会  Linux操作系统主要的内存分配算法是伙伴系统(Buddy算法),机制是按照2的幂次方进行分... 查看详情

常见的开源协议及其联系和区别

...权利,或称“自由”:*以任何目的运行此程序的自由*以学习程序工作机理为目的,对程序进行修改的自由(能得到源代码是前提)*再发行复制件的自由*改进此程序,并公开发布改进的自由(能得到源代码是前提)GPL协议最主... 查看详情

rabbitmq初学及其深入学习推荐的一些文章

记录一下学习RabbitMQ过程中,收获比较大的一些文章:什么都别说,先把这6个Demo玩一遍https://www.rabbitmq.com/getstarted.html大佬1号https://blog.csdn.net/hzw19920329/article/category/6518862大佬2号:https://blog.csdn.net/jiao_fuyou/article/categ 查看详情

机器学习基础

...关从业者研究的领域之一,整个行业也在欺负之中不断地深入发展。随着深度学习的崛起,及其徐诶再一次乘上了时代的浪潮,成为新宠!今后将在博客园和大家一起分享我在深度学习这一块的各种酸甜苦辣机器学习:顾名思义... 查看详情

java并发编程深入学习——线程池及其实现原理

Java线程池介绍  线程池,从字面含义来看,是指管理一组同构工作线程的资源池。线程池是与工作队列(workQueue)密切相关的,其中工作队列中保存了所有等待执行的任务。工作者线程(WorkThread)... 查看详情

acm新手赛体会

...,大致了解所学课程的知识结构,打好基础,并始终保持深入思考的习惯-对于老师课堂的处理哪些优点应该坚持?  老师在课堂上会为我们留出自主复习的时间,这种学思结合与学用结合的教学方式对于基础薄弱的新生帮助... 查看详情

vue学习笔记进阶篇——列表过渡及其他

...在这种场景中,使用 <transition-group>组件。在我们深入例子之前,先了解关于这个组件的几个特点:不 查看详情

如何快速阅读源码

...是个人认为行之有效的方法:先「跑起来」自顶向下拆解深入细节延伸改进本文以Mybatis为例来进行演示!先“跑起来”程序界有个老传统,学习新技术时都是从「HelloWorld」开始的!无论是学习新语言时,打印「HelloWorld」;还是... 查看详情

学习参考:《python语言及其应用》中文pdf+英文pdf+代码

...结构和函数的用法;使用模块和包编写大规模Python程序;深入理解对象、类和其他面向对象特性学习使用普通文件、关系数据库和NoSQL数据库来存储数据;使用Python构建Web客户端、服务器、API和服务;管理系统任务,比如程序、... 查看详情

机器学习-基于knn及其改进的汉字图像识别系统(代码片段)

一、简介和环境准备knn一般指邻近算法。邻近算法,或者说K最邻近(KNN,K-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。而lmknn是局部均值k最近邻分类算法。本次实验环境需要用的是Google Colab... 查看详情

java8学习——从源码角度深入stream流(学习过程)

从源代码深入Stream/学习的时候,官方文档是最重要的.及其重要的内容我们不仅要知道stream用,要知道为什么这么用,还要知道底层是怎么去实现的.--个人注释:从此看出,虽然新的jdk版本对开发人员提供了很大的遍历,但是从底层角度... 查看详情

yolou开源|汇集yolo系列所有算法,集算法学习科研改进落地于一身!(代码片段)

...U,此处的“U”意为“United”的意思,主要是为了学习而搭建的YOLO学习库,也借此向前辈们致敬,希望不被骂太惨;整个算法完全是以YOLOv5的框架进行,主要包括的目标检测算法有:YOLOv3、YOLOv4、YOLOv5... 查看详情

yolou开源|汇集yolo系列所有算法,集算法学习科研改进落地于一身!(代码片段)

...U,此处的“U”意为“United”的意思,主要是为了学习而搭建的YOLO学习库,也借此向前辈们致敬,希望不被骂太惨;整个算法完全是以YOLOv5的框架进行,主要包括的目标检测算法有:YOLOv3、YOLOv4、YOLOv5... 查看详情

yolou开源|汇集yolo系列所有算法,集算法学习科研改进落地于一身!(代码片段)

...U,此处的“U”意为“United”的意思,主要是为了学习而搭建的YOLO学习库,也借此向前辈们致敬,希望不被骂太惨;整个算法完全是以YOLOv5的框架进行,主要包括的目标检测算法有:YOLOv3、YOLOv4、YOLOv5... 查看详情

javascript设计模式-module模式及其改进

...方说到这里......《headfirst设计模式》里有一篇文章,是说使用模式的心智,  1、初学者"心智":"我要为HELLOWORLD找个模式"  2、中级人员模式:"或许这里我需要一个单件模式"  3、悟道者心智:"在这里使用一个装饰者模式... 查看详情

深入学习总结

学习总结:1.阅读github上的优秀开源代码 从最早的版本开始阅读,一层一层地阅读到最新版本,弄明白每次版本迭代的动机2.造自己的轮子 1)写小的组件 2)写框架 可从简单的UI、CSS框架开始写,再模仿vue、react... 查看详情

[聚类算法]k-means优缺点及其改进

...算法十分容易理解,也很容易实现。其实几乎所有的机器学习和数据挖掘算法都有其优点和缺点。那么K-means的缺点是什么呢?总结为下:(1)对于离群点和孤立点敏 查看详情

如何从开源 Hadoop 构建 deb/rpm 存储库或由 ambari 安装的公开可用的 HDP 源代码

】如何从开源Hadoop构建deb/rpm存储库或由ambari安装的公开可用的HDP源代码【英文标题】:Howtobuilddeb/rpmreposfromopensourceHadooporpubliclyavailableHDPsourcecodetobeinstalledbyambari【发布时间】:2020-05-1419:24:35【问题描述】:我正在尝试安装开源had... 查看详情