[实践] ubuntu下编译安装ambari
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.1, Ambari 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 100644 --- 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 @@ -81,7 +81,7 @@ 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需要的软件仓库镜像,这些已经超出我的设想,因而决定不再继续。这算是一次由于前期调研不足而导致走了弯路的失败的实验报告,留做记念。