在CentOS-x86_64位机器下编译hadoop-2.2.0源码
1、需要的软件:java, svn, autoconf, automake, libtool, ncurses-devel, openssl-devel, gcc, lzo-devel, zlib-devel, znt, maven, protobuf, cmake
检测系统中是否已安装了某一软件命令:rpm -qa|grep 软件名,如检测系统中是否安装了svn:
$ rpm -qa|grep svn

2、如果已安装,则跳过,如果没有安装,用命令:yum install svn进行安装,如:
$ yum install svn
如果yum命令安装失败(找不到相应的包),则需手动下载相应的软件包进行安装,比如maven, protobuf这两个个软件;
1、软件包:apache-maven-3.0.5-bin.tar.gz
不要使用最新的Maven3.1.1,与Maven3.0.x存在兼容性问题,所以老是出现java.lang.NoClassDefFoundError: org/sonatype/aether/graph/DependencyFilter之类的错误。选择3.0.5版本:apache-maven-3.0.5-bin.tar.gz
将apache-maven-3.0.5-bin.tar.gz移动到/usr目录(软件包所在目录):
# mv ./apache-maven-3.0.5-bin.tar.gz /usr
进入/usr目录,解压(/usr目录):
# tar –zxvf apache-maven-3.0.5-bin.tar.gz ./
删除解压后的压缩包(/usr目录):
# rm –rf apache-maven-3.0.5-bin.tar.gz
将/usr / apache-maven-3.0.5/bin加到环境变量中
# vi /etc/profile
在PATH行的最后加上“:/usr/apache-maven-3.0.5/bin”

2、使配置生效:
# source /etc/profile
验证是否安装成功:
# mvn –version
若打印以下图相关信息,则成功:

1、软件包:protobuf-2.5.0.tar.gz
将protobuf-2.5.0.tar.gz移动到/usr目录(软件包所在目录):
# mv ./ protobuf-2.5.0.tar.gz /usr
进入/usr目录,解压(/usr目录):
# tar –zxvf protobuf-2.5.0.tar.gz ./
删除解压后的压缩包(/usr目录):
# rm –rf protobuf-2.5.0.tar.gz
进入/usr/protobuf-2.5.0目录:
# cd /usr/protobuf-2.5.0
2、依次执行下列命令:
# ./configure
# make
# make check
# make install
检测是否安装成功:
# protoc --version

1、在/usr目录进行
用svn下载hadoop-2.2.0源码,命令:
$ svn checkout 'http://svn.apache.org/repos/asf/hadoop/common/tags/release-2.2.0'
源码下载完成后,在/usr目录下会有一个release-2.2.0目录,进入该目录:
$ cd /usr/release-2.2.0
$ ls –la

2、编译源码:
$ mvn package -Pdist,native -DskipTests –Dtar --不生成文档
$ mvn package -Pdist,native,docs,src -DskipTests –Dtar --生成文档,需要安装findbugs,并设置FINDBUGS_HOME环境变量
编译的时间比较久,编译过程中会联网下载所需要的包,机子没联网是不会成功编译的。
编译结束,最后打印的信息如下,每一项均是‘SUCCESS’,则编译成功:

3、编译好的代码包在/usr/release-2.2.0/hadoop-dist/target目录下:
$ cd /usr/release-2.2.0/hadoop-dist/target
$ ls –la

4、因为是在64位系统下编译的,所以编译出来的代码包是64位版本的;可以直接将/usr/release-2.2.0/hadoop-dist/target目录下的hadoop-2.2.0或者hadoop-2.2.0.tar.gz拷贝到其他linux64位平台进行搭建hadoop集群
1、1、Apache Hadoop Auth ................................ FAILURE
最新的2.2.0 的Source Code 压缩包解压出来的code有个bug 需要patch后才能编译。否则编译hadoop-auth 会提示下面错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:testCompile (default-testCompile) on project hadoop-auth: Compilation failure: Compilation failure:[ERROR] /home/chuan/trunk/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[84,13] cannot access org.mortbay.component.AbstractLifeCycle[ERROR] class file for org.mortbay.component.AbstractLifeCycle not found
在Apache Hadoop Auth 这一步会失败:
[INFO] Apache Hadoop Auth ................................ FAILURE [9.266s]
[INFO] Apache Hadoop Auth Examples ....................... SKIPPED
……
……
解决办法:
根据补丁Patch :https://issues.apache.org/jira/browse/HADOOP-10110 所述:
在 /usr/release-2.2.0/hadoop-common-project/hadoop-auth/pom.xml文件中,添加以下内容:
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-util</artifactId>
<scope>test</scope>
</dependency>
2、2、[INFO] Apache Hadoop Pipes ...............................FAILURE [5.295s]
编译Pipes失败,报错信息:
[INFO] Apache Hadoop Pipes ...............................FAILURE [5.295s]
[INFO] Apache Hadoop Tools Dist.......................... SKIPPED
……
一般是未安装ncurses-devel, openssl-devel造成
解决办法:
# yum install ncurses-devel
# yum install openssl-devel