Bigtop是去年apache基金會推出的一個對Hadoop及其周邊生態進行打包,分發和測試的工具。推出的時間不長,加上官方的文檔很簡單,只告訴你如何用bigtop安裝hadoop,其他都不講。這兩天深入的玩了一下,就個人體會來說,Bigtop算是個比較有趣的玩具。實用價值不大,尤其是對準備在hadoop本身上做文章的公司和個人來說,是一個看上去很美,但實際部署是很值得商榷的玩意。
Bigtop,本意是馬戲團的大帳篷,apache hadoop整個生態系統都是由動物標誌所構成的,所以由Cloudera提交給apache的這個軟體,用意比較明顯,就是他想用這玩意一統Hadoop生態系統圈。這個放到後面去說,總之,Cloudera的野心還是很大的。
在我玩這個東西之前,我做了兩件事,看了一下官方文檔和找中文資料,但是十分遺憾,官方文檔唯寫如何通過下載apache bigtop的官方repo去在你的作業系統裡加入一個安裝hadoop的源,卻沒有講他是如何打包和分發的。中文相關的內容我只找到寥寥幾篇新聞和一篇簡介通過bigtop安裝hadoop的部落格,基本沒有太多的參考價值,只能自己鑽研。
如果只看官方文檔,會認為這個東西不過就是apache官方提供的一個安裝hadoop ecosystem的源,包含yum的repo和apt的repo而已。但是其實這個軟體還是有點水平的,他最重要的功能並不是給你一個.repo的檔案,而是讓你自己把apache的hadoop生態系統打成安裝包和建立倉庫源。這樣你就可以把apache官方的hadoop生態圈都打成自己的包來進行分發,並且這些生態軟體與hadoop發行版之間的相容性是由bigtop來自動解決的,而Cloudera的野心就在這個自動解決上,繼續往下。
那我不是可以做一個自己的hadoop發行版,也開個公司幹個Cloudera出來了嗎?我覺得這問題你基本別想,bigtop在打包過程中,除了會下載maven的repo中的jar檔案,最重要的是他還要下載很多cloudera的jar包。等於你最後打完的東西,是個cloudera和apache混合的rpm包,這是我覺得cloudera的野心所在,所以hortonworks和mapr根本不鳥這個玩意。提都不帶提的。論開源,它裡面有閉源的東西,天知道閉源的jar包都在幹什麼。論效能和穩定,誰也沒驗證過。所以我覺得這就是一個玩具,玩玩即可,真把他打出來的東西放到生產環境,會發生什麼事情,只有上帝才知道。當然他是開源的,你可以去修改pom裡面的東西去掉cloudera的玩意換成自己的,但是我覺得那比直接改hadoop源碼還費勁。
大概介紹一下使用,我用centos,按照官方文檔要求,你必須自己解決如下的依賴:
Building Bigtop requires the following tools:
Java JDK 1.6
Apache Ant
Apache Maven
wget
tar
git
subversion
gcc
gcc-c++
make
fuse
protobuf-compiler
autoconf
automake
libtool
sharutils
asciidoc
xmlto
On RPM-based systems one also needs
我在centos6上玩的,然後我發現,用yum安裝這些東西,只是長征的開始。Maven和ProtocolBuffer是需要自己去安裝的,yum裡面沒有。然後他還少寫了一個依賴是cmake,然後你還需要自己去export PATH,JAVA_HOME,LD_LIBARY_PATH什麼的。
安裝好各種依賴,就可以開始嘗試build hadoop了。bigtop-0.6.0是用最新的apache-hadoop-2.0.5-alpha的源碼進行編譯打包。
正常的話,編譯到中間你會遇到錯誤,maven會號稱找不到com.google.protobuf的類。這時候還是得修改hadoop的一個pom.xml檔案,將編譯配置裡面的protobuf換成你自己編譯的prorocolbuffer的jar包。maven自動下載的protobuf的jar包應該是有問題,用不了。
編譯過程很簡單,但是編譯排錯是很麻煩的事情。編譯完成之後的東西看起來很眼熟。
[root@localhost hadoop]# ll -h
總用量 77M
-rw-r--r-- 1 root root 12M 7月 6 16:33 hadoop-2.0.5-1.el6.src.rpm
-rw-r--r-- 1 root root 15M 7月 6 16:53 hadoop-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 7.6K 7月 6 16:53 hadoop-client-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 15K 7月 6 16:53 hadoop-conf-pseudo-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 139K 7月 6 16:53 hadoop-debuginfo-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 4.0M 7月 6 16:53 hadoop-doc-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 12M 7月 6 16:53 hadoop-hdfs-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 4.6K 7月 6 16:53 hadoop-hdfs-datanode-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 21K 7月 6 16:53 hadoop-hdfs-fuse-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 4.5K 7月 6 16:53 hadoop-hdfs-journalnode-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 4.6K 7月 6 16:53 hadoop-hdfs-namenode-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 4.6K 7月 6 16:53 hadoop-hdfs-secondarynamenode-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 4.6K 7月 6 16:53 hadoop-hdfs-zkfc-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 17M 7月 6 16:53 hadoop-httpfs-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 26K 7月 6 16:53 hadoop-libhdfs-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 11M 7月 6 16:53 hadoop-mapreduce-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 4.6K 7月 6 16:53 hadoop-mapreduce-historyserver-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 8.8M 7月 6 16:53 hadoop-yarn-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 4.5K 7月 6 16:53 hadoop-yarn-nodemanager-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 4.4K 7月 6 16:53 hadoop-yarn-proxyserver-2.0.5-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 4.5K 7月 6 16:53 hadoop-yarn-resourcemanager-2.0.5-1.el6.x86_64.rpm
娘的,是不是跟Cloudera的東西一模一樣,唯一的區別就是前面沒有了cdh的首碼。除了編譯2.x,1.x我也試了,預設情況下遠程已經找不到原始碼的檔案了。
也嘗試編了其他的東西,mahout官方代碼,可執行加源碼一共70多兆,打包完了100多兆。oozie連源碼不到1兆,打完居然60多兆。
hive和pig編譯失敗,直接把我的2G記憶體的虛擬機器跑掛了,所以我覺得這個東西基本就是個玩具,而且受cloudera影響太多,這些編譯好的安裝包,在用rpm安裝的時候,需要用yum解決的依賴,比他打好的包要多得多。我只是嘗試rpm -ivh hadoop-2.0.5-1.el6.x86_64.rpm,告訴我缺少一些依賴,然後用yum一看,居然這些依賴加上依賴的依賴,要下載裝150多兆。除去我之前編譯前下載的各種依賴100M,這要是用在生產環境下,每台伺服器部署的時候都要先下載幾百兆的作業系統依賴,太崩潰了。
所以我覺得,這東西玩玩還行,研究一下他的原理還可以,用到生產環境還是算了,真拿這個裝,比拿tar包安裝hadoop生態圈還費勁。
本文出自 “實踐檢驗真理” 部落格,謝絕轉載!