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需要的軟件倉庫鏡像,這些已經超出我的設想,因而決定不再繼續。這算是一次由於前期調研不足而導致走了彎路的失敗的實驗報告,留做記念。
