按照以下步骤,对hadoop2.3也成功通过编译
转:http://f.dataguru.cn/thread-273409-1-1.html
一、环境
1、主机系统为Windows 7 64位,虚拟机软件为 VMware Workstation 10。
2、虚拟机操作系统为 CentOS6 64位。并且已经在CentOS上安装了VMware Tools工具,这样,可以直接将主机系统中文件直接复制到CentOS系统中。
二、具体步骤
1、因为 hadoop 是由 java 语言编写的(少部分为C所写),因此需要安装Java的编译环境(JDK)。
因为 CentOS系统为64位,因此安装的Java的编译环境也为64位。
下载地址如下:
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
打开界面之后,先选中 Accept License Agreement,然后下载 jdk-7u55-linux-x64.tar.gz。
下载完成之后,将其复制到 /usr 目录下并使用
tar -zxvf jdk-7u55-linux-x64.tar.gz
命令,将其解压到当前目录下,如下图:
然后设置JAVA_HOME环境变量,并将Java的可执行目录添加到PATH环境变量中,如下所示
export JAVA_HOME=/usr/jdk1.7.0_55
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
注:我是直接添加到 /etc/profile 文件中。
测试设置是否成功的方法为:Log out 当前用户,然后重新登陆,再运行 java -version ,如
则表示安装成功了了。
2、由于 hadoop 使用 Maven 来进行项目构建的,因此需要提前安装此工具。
下载地址如下:
http://maven.apache.org/download.cgi
从打开的页面,可以看到很多的版本,我下载的是 Maven 3.0.5 版本
下载完成之后,将其复制到 /usr 目录下并使用
tar -zxvf apache-maven-3.0.5-bin.tar.gz
命令,将其解压到当前目录下,如下图:
然后将Maven的可执行目录添加到PATH环境变量中,如下所示
export PATH=$JAVA_HOME/bin:/usr/apache-maven-3.0.5/bin:$PATH
注:我为什么选择Maven 3.0.5的版本,是因为之前看其它人的帖子的时候说:使用最新的 Maven3.1.1,所以老是出现java.lang.NoClassDefFoundError: org/sonatype/aether/graph/DependencyFilter之类的错误。
测试设置是否成功的方法为:Log out 当前用户,然后重新登陆,再运行 mvn 命令 ,如
则表示安装成功了了。
3、protobuf下载地址如下:
https://code.google.com/p/protobuf/downloads/list
从打开的页面,下载protobuf-2.5.0.tar.gz 版本
下载完成之后,将其复制到 /usr 目录下并使用
tar -zxvf protobuf-2.5.0.tar.gz
命令,将其解压到当前目录下,如下图:
然后进入 protobuf-2.5.0 目录,运行如下语句:
./configure
make
make check
make install
运行成功之后,通过如下方式来验证是否安装成功
4、安装其它参与编译的程序
yum install autoconf automake libtool cmake ncurses-devel openssl-devel gcc*
直接运行以下的命令行,等待安装完成即可。
5、编译 Hadoop-2.2.0 程序
注意:此处,我没有使用svn方式进行源代码的下载,因为太慢,我是直接将已经打包好的源码包,如下所示:
把hadoop-2.2.0-src.tar.gz文件下载成功之后,将其复制到 /usr 目录下并使用
tar -zxvf hadoop-2.2.0-src.tar.gz
命令,将其解压到当前目录下,如下图:
进行 hadoop-2.2.0-src 目录,运行如下命令:
[root@CentOSx64 hadoop-2.2.0-src]#mvn package -Pdist,native -DskipTests -Dtar
在编译到 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
其解决方法已经在下面的链接中给出:
https://issues.apache.org/jira/browse/HADOOP-10110
,即,修改 /hadoop-2.2.0-src/hadoop-common-project/hadoop-auth 目录下的 pom.xml 文件,
增加红色框框中的内容,再将运行编译命令即可。
注:这个问题是2.2.0版本的bug,如何使用的是其它版本,是不会出现上面的错误的。
漫长的等待。。。。。。
编译结束之后会给出每个模块编译的结果和用时,如下所示:
其编译好的文件位于,
本地库位于,
到此,整个编译过程结束。
三、其它
其实编译的时间长,主要的原因是maven需要解释pom.xml文件,并检查hadoop依赖的jar 包,并进行下载。真正编译的时间到不是很长,下面我提供我这边编译时已经下载的jar包,将其解压到 ~/.m2/repository 目录下(此目录为默认目录,如果您修改过了,就请放到对应的目录下),
,希望能减少编译时间。
下载地址
http://pan.baidu.com/s/1kTibnEJ