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

  • lzo-devel

  • zlib-devel

  • fuse-devel

  • openssl-devel

  • python-devel

  • libxml2-devel

  • libxslt-devel

  • cyrus-sasl-devel

  • sqlite-devel

  • mysql-devel

  • openldap-devel

  • rpm-build

  • createrepo

  • redhat-rpm-config (RedHat/CentOS only)


我在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生态圈还费劲。