Hadoop 2.x 重新编译

本文记录Hadoop 2.x在Linux x64下重新编译的过程,解决hadoop在64位下安装报错问题。

环境:Centos 6.5 x64 & Hadoop 2.2

友情提示:编译速度非常漫长,因为需要链接国外网站下载资源,白天就10K左右速度,推荐半夜做。

一、安装编译包

yum install svn

yum install autoconf automake libtool cmake

yum install ncurses-devel

yum install openssl-devel

yum install gcc*

二、安装maven

maven项目主页:http://maven.apache.org/

下载安装包apache-maven-3.2.1-bin.tar.gz,解压到/usr/local目录下。

切换到hadoop安装用户下,修改配置文件.bash_profile

PATH=$PATH:$HOME/bin:/usr/local/apache-maven-3.2.1/bin
JAVA_HOMT=/usr/java/jdk1.7.0_51
export JAVA_HOME
export PATH

三、安装protobuf

protobuf项目主页:https://code.google.com/p/protobuf/

下载安装包protobuf-2.5.0.tar.gz,解压到/usr/local目录下。

进入protobuf目录下

执行./configure

执行make

执行make check 

执行make install

执行完成后检查/usr/local/bin/下是否有protoc目录。

四、获取hadoop源代码

源代码地址:http://svn.apache.org/repos/asf/hadoop

hadoop安装用户下执行svn checkout http://svn.apache.org/repos/asf/hadoop/common/tags/release-2.2.0

svn迁出代码会比较慢,可以直接在hadoop官网下载源码包hadoop-2.2.0-src.tar.gz,解压出的内容和svn一致,相对来说更小,因为剔除了隐含的svn信息。

五、编译

执行mvn package -Pdist,native -DskipTests -Dtar,编译过程非常漫长。

如果发生如下错误:

[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /home/huser/hadoop/hadoop-2.2.0-src/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[88,11] 错误: 无法访问AbstractLifeCycle
[ERROR] 找不到org.mortbay.component.AbstractLifeCycle的类文件
/home/huser/hadoop/hadoop-2.2.0-src/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[96,29] 错误: 无法访问LifeCycle
[ERROR] 找不到org.mortbay.component.LifeCycle的类文件
/home/huser/hadoop/hadoop-2.2.0-src/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[98,10] 错误: 找不到符号
[ERROR] 符号: 方法 start()
位置: 类型为Server的变量 server
/home/huser/hadoop/hadoop-2.2.0-src/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[104,12] 错误: 找不到符号
[INFO] 4 errors

修改源码下hadoop-common-project/hadoop-auth/pom.xml,添加红色部分代码,这是2.2版本的一个bug,在2.3版本里面已经解决。

<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>

如果发生如下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project hadoop-hdfs: Fatal error compiling: Error while executing the compiler. InvocationTargetException: Java heap space -> [Help 1]

修改.bash_profile文件,添加export MAVEN_OPTS='-Xms256m -Xmx512m', 解决内存资源不足。

编译成功会提示BUILE SUCCESS

编译成果在/home/huser/hadoop/hadoop-2.2.0-src/hadoop-dist/target

进入/home/huser/hadoop/hadoop-2.2.0-src/hadoop-dist/target/hadoop-2.2.0/lib/native

使用命令查看编译出来的类库,已经是64位

$ file ./libhadoop.so.1.0.0 
./libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped

$ file ./libhdfs.so.0.0.0
./libhdfs.so.0.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped

将编译出来的类库拷贝替换先前报错环境中的类库,启动hadoop。

至此解决http://www.cnblogs.com/guarder/p/3676595.html里面启动报错问题。

posted on 2014-04-28 21:23  guarder  阅读(577)  评论(0编辑  收藏  举报