一、ambari 与 cloudera manager 的对比

安装过 hadoop 集群的人都应该清楚,hadoop 生态从安装、配置到后期运维是一个非常艰辛的过程,一般来说安装 hadoop 可能就需要几天时间,运维一个小型集群同样需要几个人。ambari 和 cloudera Manager 这两个系统,目的就是简化 hadoop 生态集群的安装、配置,同时提高 hadoop 运维效率,以及对 hadoop 集群进行监控。

Ambari 是 Hortonworks 贡献给 Apache 开源社区的顶级项目,它是一个基于 web 的工具,用于安装、配置、管理和监视 Hadoop 集群。

Cloudera Manager 是 cloudera 公司的一个产品,着重于帮助大家管理自己的 cdh 集群,通过 Cloudera Manager 统一的 UI 界面来快速地自动配置和部署 cdh 和其相关组件。

以下是 ambari 与 cloudear manager 之间的对比:

Ambari Cloudera Manager(免费版)
安装部署 简单 相对复杂
配置版本控制和历史记录 支持 不支持
二次开发 支持 不支持
集成服务 支持 较弱
文档 稀少 丰富
体验效果 较易用、较稳定 易用、稳定
开源性 开源 有免费版和商用版
所属机构 由 hortonworks 贡献给 apache cloudera

总的来说:

  • 如果对服务集成或二次开发有需求的话,可以选择 ambari 。
  • 如果对集群稳定性要求高,服务集成相对弱的话,可以选择 cloudera manager 。

另外,目前 cloudera 公司已将 hortonworks 收购,旗下的 hdp 也与 cdh 合并,推出了 cdp 。不过 cloudera 公司也承诺,ambari 还是开源的。像目前最新的 hdp 3.1.5.0 版本已经不能直接在 cloudera 官网下载,如果企业用 hdp 3.1.5.0 版本,不知道会不会有侵权风险。

所以我建议呢,ambari 是开源的,我们可以自己编译获取相关 rpm 包使用。对于 hdp 的话,要么就用历史版本,要么就自己集成 apache hadoop 的。关于 ambari 自定义服务集成,我有录制系列视频和笔记,共二十讲,详情可阅读 https://www.yuque.com/create17/ambari/miyk6c 了解。

二、与 Ambari 的羁绊

Ambari 是一款用于部署、管理、监控 hadoop 集群的开源系统。它提供了以向导式的方式,在任意主机上安装部署 hadoop 服务;还提供了 安装部署、配置、启动、监控服务状态、停止、卸载 hadoop 服务的功能;还提供了 指标监控 功能,通过 Ambari Metrics 将 hadoop 服务的各项指标汇总到仪表盘并展示到前端页面;还提供了 告警 功能,支持预定的监控指标来实现通知告警。

从设计上看,Ambari 使用的是 主/从 架构,即一个 ambari server 和 多个 ambari agent 。它通过 ambari-server 来实现集群的管理和操作命令的发送,而具体的管理动作则由 ambari-agent 来实现。

我对 Ambari 的接触开始于 2017 年的工作,通过 Ambari 来快速安装部署 hadoop 生态圈各服务,简单高效。公司也想将 Ambari 封装或包装成自己的大数据平台产品,于是,我们小组几人便走上了 Ambari 的二次开发的摸爬滚打的道路。

起初是汉化和修改页面 css 样式,有时候也改改原生的 ambari 页面 bug。在这个过程里,主要涉及到的 ambari 模块是 ambari-web 和 ambari-admin 。

紧接着就是新功能开发,我们为 ambari 增加了一些新功能,前端增加页面开发,后端增加 restful API 接口供前端调用。前端主要涉及到的模块是 ambari-web ;后端主要涉及的模块是 ambari-server 。

还有对自定义服务的集成,除了 hdp 服务之外,我们还集成了很多服务,比如:Elasticsearch、Kylin、Hue、PostgreSQL、JanusGraph、TensorFlow、Caffe、Redis、Ldap 等等很多服务,简直丧心病狂,无所不能其集成,哈哈哈。

我们还对 Ambari 的安装部署、卸载进行了脚本控制,可以实现一键部署以及一键卸载,总的来说感觉比较简陋,可能是因为当初需求就比较简单。其实对于这个功能点来说,完全可以开发出一个可视化的安装部署工具,调用 ambari API 接口封装成我们自己的部署卸载工具,顺带着将 hdp 也部署上,岂不美哉。这里感兴趣的朋友可以用 Ansible 尝试一下。

三、讲讲干货

在上面章节里面,提到了 ambari-web 、ambari-admin、ambari-server、自定义服务集成。在这个章节里面我就根据我的经验,挨个讲一讲我对这几个模块的理解,讲的如果欠妥,希望朋友们指正啊,哈哈!

注:本文以 ambari 2.7.3 版本为例说明!

1、ambari-web

仪表板、服务管理相关界面都集中在 ambari-web 模块中。

ambari-web 模块可以单独编译,实时看到编译后效果,用来修改开发 ambari web UI 页面。采用 ember.js(版本:v1.0.pre)作为前端 mvc 框架和 nodejs 相关工具,用 handlebars.js 作为页面渲染引擎,在 css/html 方面还用了 Bootstrap(v3.3.7)框架。

关于 ambari 的 emberjs 版本如何查看:打开 ambari web 界面,F12 打开控制台,在最下面的输入框里面输入:Ember.VERSION 即可输出版本号。如下图所示:

目录结构:

ambari-web 模块可以单独编译,利用 npm + brunch 可以实现修改后实时查看效果,对于二次开发来说简直是非常方便!

2、ambari-admin

点击右上角 manage ambari ,可以进入到后台管理界面,这里涉及到的就是 ambari-admin 模块。

ambari-admin 也可以进行单独编译,利用 npm + bower + gulp 可以实现修改后实时查看效果,bower 与 npm 的使用方式基本一样,angularjs 也与 emberjs 风格类似。

3、ambari-server

ambari-server 的作用有很多,第一是提供 restful API 接口;第二是监测 ambari-agent 心跳,收集运行在各主机上的组件状态信息,并分发指令到各 agent 节点,让各 agent 节点去执行具体动作;等等应该还有很多作用…

如果你需要修改 ambari-server 源码的话,当开发完毕后,源码是需要编译的,你需要获取到新的 ambari-server.rpm 包或 jar 包来更新服务,查看效果。

ambari 是用 maven 来编译的,如果要对 ambari-server 二次开发的话,比如开发接口,建议多 debug 。

目前,我已经录制完 ambari 自定义服务集成的视频了嘛,接下来,就开始准备 ambari 编译、二次开发相关的课程了,有在规划和执行。

4、ambari 自定义服务集成

ambari 相比于 cloudera manager 来说,有一个很突出的优势,就是集成第三方服务比较方便。集成服务什么意思呢,就是将你的任何服务,小到一个 jar 包都可以让 ambari 来给你管理:安装、启停、卸载、监测运行状态、设置告警规则等等。

自从 2020 年开始,我就发觉网上使用 ambari 的同学多了很多,随着 cloudera 收购 hdp 并进入收费模式,越来越多的公司选择了 ambari 来管理大数据平台,ambari 集成第三方服务的需求也就变得越来越常见。

由于网上关于 ambari 自定义服务集成的资料非常稀有,很多都是 Ambari 安装部署的资料,所以为了降低伙伴们的学习成本,我在 2020 年初就开始了录制《Ambari 自定义服务集成》的系列视频,目前已经录制完毕,一共二十讲。

视频中以 Ambari 2.7.3 集成 Elasticsearch v6.4.0 服务、集成 Apache Zookeeper 服务为例,从 0 到 1 ,完成了以下功能,完全达到生产交付的标准,感兴趣的朋友可以了解一波:https://www.yuque.com/create17/ambari/miyk6c

四、我的个人规划

其实是对 ambari 相关知识分享的一个规划,就目前来说,在网上的 Ambari 资料,大多还都停留在安装部署,对于深层次的,像前端开发、后端 API 接口开发、Ambari 编译等相关资料都比较少,不成体系。

所以想根据自己积累的经验,业余时间把 ambari 编译、二次开发的一些干货经验录制成视频,供大家学习。

目前,关于 Ambari 的文档有以下几方面:

1)Ambari + HDP 的安装部署

2)Ambari 自定义服务集成实战训练营

3)ambari 源码编译及前后端二次开发实战训练营

关于实战训练营,详情可了解:https://www.yuque.com/create17/ambari/xpoa10

目前已经有在更新了:

  • 编译过程(安装必要编译工具、修改mvn镜像、打版本号、编译、解决编译错误等)
  • 注释掉某个 ambari 模块再编译
  • 编译完成后的安装步骤分享
  • 什么情况下,可以单纯替换jar包
  • 单独编译 ambari-web 和 ambari-admin,页面二次开发,修改后实时查看效果
  • 汉化 ambari 页面
  • 如何自动同步 windows 本地和 linux 服务器之前的代码
  • ambari 编译出来的是相关 rpm 包,rpm 包里面内容讲解,了解 ambari 各个模块的关系。

这是我画的关于 ambari 二次开发的脑图,可以看一下: