编译Hadoop

写在前面的话:有话题就发一帖,证明这个BLOG是活的。

我安装hadoop,是为了支撑spark。spark当前最新稳定版为1.3.0,需要的hadoop版本为2.4.*。2.4.*最新版为2.4.1。
hadoop官网下载页面已经不提供2.4.1的下载链接。但可以在apache的存档站点找到2.4.1:http://archive.apache.org/dist/hadoop/core/
下载来的hadoop的原生库是32位的,而目前主流机器架构却是64位,我们需要自己手动从源码编译hadoop。

hadoop源码说明文件为的BUILDING.txt。根据说明文件,需要like-unix系统,jdk1.6+,maven 3.0+,Findbugs 1.3.9,protobuf 2.5.0,cmake 2.6+,以及网络连接。
根据我的经验,如果不需要构建文档,Findbugs可无。文档最好有,虽然源码包里的文档只是API文档。帮助文档还得是官方包里才有。但我们可以在这里找到2.4.1的帮助文档。
jdk最好采用Oracle版。Redhat系列下载rpm包,yum localinstall即可。debian系可以下载压缩包,然后借助JavaPackage,将压缩包转为deb包(如果是jdk 1.8,可能需要wheezy-backports版的JavaPackage)。无论哪个系列的发行版,都需要更改默认java软链接到Oracle jdk。如果是debian系,可以借助update-alternatives命令完成这件工作,具体的可见JavaPackage的wiki。安装好jdk后,还需配置JAVA_HOME——我是这么想的,但我编译hadoop时,JAVA_HOME是早已配置好的。执行:
echo ‘export JAVA_HOME=……’ > /etc/profile.d/java.sh
source /etc/profile
protobuf必须2.5.0,还不认2.6.*。我机器上的protobuf刚好2.6,只有下载2.5,重新编译覆盖安装。

protobuf的github页面为https://github.com/google/protobuf
编译安装protobuf,需要先安装automake,然后照官方说明,一步步执行即可:
./autogen.sh
./configure
make
make check
sudo make install
安装protobuf2.5.0后,执行protoc –version检测版本,报:protoc: error while loading shared libraries: libprotobuf.so.8。执行下面的即可解决:
sudo ldconfig
再执行protoc –version检测版本,输出2.5.0,再下一步。

根据protobuf上吃过的亏,Findbugs既然要求1.3.9,而不是1.3.9+,还是严格采用1.3.9好。Findbugs无需安装,解压,环境变量中指定FINDBUGS_HOME。因为Findbugs只用一回,就不配置持久全局环境变量了,直接执行FINDBUGS_HOME=Findbugs路径。也可以在稍候的mvn命令前加上FINDBUGS_HOME=Findbugs路径。

按照BUILDING.TXT,执行编译命令:
mvn package -Pdist,native,docs -DskipTests -Dtar
该命令将会编译产生dist文件(怎么翻译?)、原生库、文档,跳过测试,并将最终文件tar打包
这时会陷入长久的等待……

最后maven输出BUILD SUCCESS,表示你成功了;如果不幸输出BUILD FAILED,检查人品吧。
编译成功后,找到源码目录下的hadoop-dist/target/hadoop-2.4.1.tar.gz,我们需要的就是这个压缩文件。

PS:如果只是要64位的原生库,应该只编译原生库部分就可以了。

This entry was posted in Uncategorized and tagged . Bookmark the permalink.

3 Responses to 编译Hadoop

  1. hnwy says:

    嗯 ,我还是经常看HP论坛里朋友的博客的

Leave a Reply to hnwy Cancel reply

Your email address will not be published. Required fields are marked *