环境说明


centos6.4 64bit


更新系统安装包


yum update


安装


yum -y install svn git ncurses-devel gcc* lzo-devel zlib-devel autoconf automake libtool cmake openssl-devel


安装protobuf


centos6.4用yum安装是2.3.0,得用最新的,就编译安装


安装jdk,ant,maven

修改maven的配置conf/settings.xml,强烈建议做这一步,国外的镜像很不稳定,有时候会下载失败导致编译失败,这时候得重新编译n(n>=1)次才能通过,改用国内的镜像之后,下载速度特别快,整个编译过程也提速不少。
一是在 之间添加

<mirror>
<id>nexus-osc</id>
<mirrorOf>*</mirrorOf>
<name>Nexusosc</name>
<url</url>
</mirror>

二是在之间添加

<profile>
<id>jdk-1.7</id>
<activation>
<jdk>1.7</jdk>
</activation>
<repositories>
<repository>
<id>nexus</id>
<name>local private nexus</name>
<url/url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>local private nexus</name>
<url></url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>

安装findbugs

解压,设置环境变量就行

安装forrest

也是解压,设置环境变量就行。(我没装这个也编译成功了)
8.2.2.0里边有个bug,需要在在hadoop-common-project/hadoop-auth/pom.xml中添加几行代码
在之间添加

<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-util</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<scope>test</scope>
</dependency>

看了下2.4.1里边已经把这个bug修复了。

编译

有人说用root用户编译会出错,没试,我用普通用户编译的,都没sudo权限。在hadoop-src目录下执行,编译所用用户需要对此目录拥有写权限,这一点很重要,编译时会产生大量的中间文件和结果文件,没有写权限就会报错。

mvn clean package -Pdist,native -DskipTests -Dtar

如果想查看更详细的信息,可以加上-X -e,将输出级别调到debug级别。
改了镜像之后下载jar包很快,比编译2.2.0时(当时没改)速度快很多,在服务器上编译的,用了23分钟。

编译之后

编译之后的东西都在hadoop-src/hadoop-dist/target目录下边。

遇到的错误

遇到的错误都会有明确的堆栈信息,特别是maven在debug状态下,一般都可以根据信息自己解决。
遇到的一个比较奇葩的错误是下面这个

http://stackoverflow.com/questions/20381070/ant-buildexception-error-building-hadoop-2-2-0

大概意思是说,我的环境有点混乱,的确是,这个环境用Cloudera Manager装过集群,然后按照官方的方法卸载了;卸载jdk时发现有3个jkd,Oracle的一个,两个openjdk,6和7;protobuf,我先用yum装的,然后发现是2.3.0,没有卸载,就直接编译安装的2.5.0,反正各种混乱,已经剪不断,理还乱了,就换了一个环境,按照上边的步骤,一次成功。
下面是参考的另一个错误

http://stackoverflow.com/questions/17126213/building-hadoop-with-maven-failed-to-execute-goal-org-apache-maven-pluginsma