ambari是一个Hadoop套件的管理工具,可以方便部署、管理及监控。最初开发时使用的就是RH系的Linux,只支持RHEL、CentOS5/6、OEL、SLES暂不支持Ubuntu;可我的需求就是在ubuntu系统中使用,我认为在ambari完全使用开源软件堆积,想兼容Debian系的系统不会太难,而且看了一下文档,大概了解了编译时会生成rpm包,而ubuntu又是有办法解压rpm的,理论上说没有问题,于是决定自己实践一把。

后记:在追查代码的过程中发现,目前在开发的ambari版本已经开始支持ubuntu12;

主要步骤都参考官方cwiki:Build and Install Ambari 1.4.1Ambari Development

环境

ubuntu 10.04

postgresql 8.4

安装Node.js

访问http://nodejs.org/download/,下载源码,解压后编译安装:

$ ./configure
$ make
$ sudo make install

获取ambari

https://dist.apache.org/repos/dist/release/incubator/ambari/下载的ambari(1.4.1及1.2.5),及从ambari github上clone出的trunk,编译后没有ambari-web模块,且没有找到有效解决方案。最后通过cwiki上开发说明提供的git链接找到了另一处源码,这份源码不仅可用,而且从脚本中可以看出开发者已经开始尝试兼容ubuntu;

$ git clone https://git-wip-us.apache.org/repos/asf/ambari.git
$ cd ambari

ambari的代码获取过程一波三折,从中我发觉ambari项目的代码及文档都比较混乱,或许该项目的活跃度不是太高,这也是可以理解的:对于已有hadoop集群的人来说,通常会选择自己开发管理及监控系统,而对于没有hadoop集群的人,则可以直接通常操作系统软件源获取ambari的发布版。

安装brunch

$ cd ambary-web
$ sudo npm install -g brunch

安装rpmbuild

ambari编译时依赖rpmbuild打包成rpm安装包,因而需要rpm套件,很幸运,ubuntu可以安装这一套件:

$ sudo apt-get install rpm yum

编译ambari

为使得ambari支持ubuntu10,需要对源码进行小的修改,修改ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java,为ALL_SUPPORTED_OS添加ubuntu10,patch如下:

diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
index 2305d5e..9bcfae3
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
@@ -, +, @@ public class AmbariMetaInfo {
// all the supported OS'es
private static final List<String> ALL_SUPPORTED_OS = Arrays.asList(
"centos5", "redhat5", "centos6", "redhat6", "oraclelinux5",
- "oraclelinux6", "suse11", "sles11", "ubuntu12");
+ "oraclelinux6", "suse11", "sles11", "ubuntu10", "ubuntu12"); public static final String SERVICE_METRIC_FILE_NAME = "metrics.json";

编译如下:

$ cd ambary
$ mvn -X -B -e clean install package rpm:rpm -DskipTests -Dpython.ver="python >= 2.6"

注:需要mvn 3,mvn 3的最新版本是3.1.1,但因为maven 3.1.x与aether的某些兼容性问题,我降级使用了maven 3.0.5;

安装ambari-server

$ cd ambari-server/target/rpm/ambari-server/RPMS/noarch/
$ sudo rpm -iUvh ambari-server-*.rpm --force-debian --nodeps

注:本应该这样安装:sudo yum install ambari-server*.rpm

但会遇到依赖问题:
Error: Missing Dependency: postgresql-server >= 8.1 is needed by package xxx

即使本地安装了postgresql、ssh等软件,但因为这些软件不在yum的管理数据库中有记录,所以依然无法解决依赖问题,因而强制忽略依赖完成安装。

安装postgresql

$ sudo apt-get install postgresql
$ cd /etc/init.d && sudo ln -s postgresql-8.4 postgresql

注:

(1)安装后会自动启动postgresql服务;但我遇到这个问题:

* The PostgreSQL server failed to start. Please check the log output:
2013-11-28 11:39:15 CST LOG:  could not bind IPv6 socket: Cannot assign requested address
2013-11-28 11:39:15 CST HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2013-11-28 11:39:15 CST WARNING:  could not create listen socket for "localhost"
2013-11-28 11:39:15 CST FATAL:  could not create any TCP/IP sockets

没有查到解决方案,最后把postgresql的配置文件/etc/postgresql/8.4/main/postgresql.conf修改了一下,把listen_addresses写成127.0.0.1,这样它就不会尝试去绑定ipv6的端口,绕过这一问题;

(2)上面第二步sudo ln操作的目标在于,可以直接通过sudo service postgresql来管理psql数据库,而不是sudo service postgresql-8.4;这对于兼容后面的部署脚本很重要;

设置和启动ambari-server

对/etc/ambari-server/conf/ambari.properties进行必要的设置,比如设置java.home为已经安装的jdk目录(如果没有的话,setup过程会自动下载)、设置ambari-server.user为ambari用户;

设置完成后开始setup及start:

$ sudo ambari-server setup -v
$ sudo ambary-server start

注:强烈建议在setup时使用-v参数;虽然开发版本中已经在注意兼容ubuntu,但依然有细节做的不好,比如无法正确判断psql数据库是否启动。打开verbose方便你检查设置出错的哪一步。

至此,可以访问http://127.0.0.1:8080,使用admin:admin登录进ambari系统了。

安装ambari-agent

$ cd ambari-agent/target/rpm/ambari-agent/RPMS/x86_64/
$ sudo rpm -ivh ambari-agent-*.rpm --force-debian --nodeps

设置和启动ambari-agent

修改/etc/ambari-agent/conf/ambari-agent.ini进行必要的配置,然后启动ambari-agent

$ sudo ambari-agent start

----

后记:本文原计划写成一个系列,包括从编译安装到部署到对已有集群进行监控管理,虽然在前期的编译安装过程已经通过,但到部署时才发现,其要求所有节点可以连接外网(可我的部署环境只有内网),或自己搭建一个HDP需要的软件仓库镜像,这些已经超出我的设想,因而决定不再继续。这算是一次由于前期调研不足而导致走了弯路的失败的实验报告,留做记念。

[实践] ubuntu下编译安装ambari的更多相关文章

  1. Ubuntu下编译安装postgreSQL 10.5

    Ubuntu下编译安装postgreSQL 10.5 ubuntu 16.04 LTS系统postgreSQL 10.5 安装包准备 1.从PostgreSQL官网下载PostgreSQL的安装包 安 ...

  2. 在Ubuntu下编译安装GreatSQL

    在Ubuntu下编译安装GreatSQL 本次介绍如何利用Docker构建Ubuntu环境,并将GreatSQL源码编译成二进制文件. 1.准备工作 先创建本次Docker的workdir为 /dat ...

  3. ubuntu下编译安装poco

    系统环境: ubuntu版本:Linux jfcai-VirtualBox 4.15.0-29-generic #31-Ubuntu SMP Tue Jul 17 15:39:52 UTC 2018 ...

  4. Ubuntu 下编译安装linux

    1. 准备工作切换为管理员权限,sudo –i 输入用户密码 进入root 权限apt-get install build-essential kernel-package libncurses5-d ...

  5. linux-i386(ubuntu)下编译安装gsoap_2.8.17过程记录

    过程记录 :  1.下载gsoap_2.8.17.zip 并 解压 : $unzip gsoap_2.8.17.zip     2.进入解压后的目录gsoap-2.8   3.自动配置编译环境:  $ ...

  6. ubuntu 下编译安装 mysql php nginx 及常见错误 (持续添加)

    mysql mysql 可以使用mysql 官方提供的apt源进行安装 参见这里 php 安装前先安装一些常见库 sudo apt-get install libpng16-16 libpng16-d ...

  7. ubuntu下编译安装mysql记录

         搞了整整一天,好不容易折腾完,在此记录下,下次就省事了.     去官网http://www.php.net/downloads.php下载所需要的php版本,这里我选择5.6.22.    ...

  8. ubuntu下编译安装PHP

    首先配置configure // ./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2/bin/apxs --wit ...

  9. ubuntu下编译安装apache

    官网http://httpd.apache.org/download.cgi下载apache源码包后 /*解包*/ gzip -d httpd-2_x_NN.tar.gz tar -xf httpd- ...

随机推荐

  1. IOS页面自动布局 之 NSLayoutConstraint基础篇

    使用AutoLayout之前需要知道以下两点: 1.必须设置 translatesAutoresizingMaskIntoConstraints为NO. 2.如果是viewControl则AutoLa ...

  2. C#设计模式——观察者模式(Observer Pattern)1

    一.概述在软件设计工作中会存在对象之间的依赖关系,当某一对象发生变化时,所有依赖它的对象都需要得到通知.如果设计的不好,很容易造成对象之间的耦合度太高,难以应对变化.使用观察者模式可以降低对象之间的依 ...

  3. JavaScript异常捕获

    理论准备 ★   异常捕获 △ 异常:当JavaScript引擎执行JavaScript代码时,发生了错误,导致程序停止运行: △ 异常抛出:当异常产生,并且这个异常生成一个错误信息: △ 异常捕获: ...

  4. MongoDB之数据分布式存储

    在MongoDB的世界,做数据分布式存储显得非常简单.只要按照前面介绍的 集群搭建 完成就完全具备了数据分布式存储的要求. 在这里分清几个概念:去前面的文章可以找到介绍 1. 复制集   功能是实现数 ...

  5. 页面UI注意事项,你在乎吗?

    早上打开微信,看到一篇文章,下面就和大家分享一下,该文章属于前端文章系列,希望做后台开发系统的程序员也可以学习一下,只会写代码把功能实现是第一,接下来也要把界面做做好. 现在的界面风格对于手机而言,一 ...

  6. 两种设计模式(2)==>>"单例"

    所谓“单例”: 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资 ...

  7. 【iOS】Quartz2D图片剪切

    一.使用Quartz2D完成图片剪切1.把图片显示在自定义的view中 先把图片绘制到view上.按照原始大小,把图片绘制到一个点上. 代码: - (void)drawRect:(CGRect)rec ...

  8. SharePoint 2013 新功能探索 之 标注控件

    SharePoint 2013 引入了新的UI,同时也跟进了网络潮流,把应用最广泛的标注控件也引入到了SharePoint,先看两个应用    以上是两个开发当中经常会用到,下面就介绍一下如何开发相同 ...

  9. Bootstrap-用ICheck插件给CheckBox换新装

    直接来吧! 下面是添加上复选框以后的树形菜单效果: 这样看起来有种驴唇不对马嘴的感觉. 所以就要想办法给这些复选框添加1些样式,让全部界面看起来搭配1些. 通过查询得知,有个叫ICheck的第3方Bo ...

  10. lazyload.js详解

    简介 lazyload.js用于长页面图片的延迟加载,视口外的图片会在窗口滚动到它的位置时再进行加载,这是与预加载相反的. 优点: 它可以提高页面加载速度: 在某些情况清晰它也可以帮助减少服务器负载. ...