Maven将Hadoop2.2.0源码编译

Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。下文主要讲述使用Maven将Hadoop2.2.0源码编译成Eclipse项目方法:
步骤:
1. 下载hadoop2.2.0源码包  http://mirror.bit.edu.cn/apach ... ar.gz
2. 解压缩到eclipse的workspace中。这里最好解压缩到workspace中,编译完成后直接导入就好了,不用移动,移动的话容易造成依赖关系的确实,我比较懒,所以就放在workspace中编译,省的还要build path。
3. 安装maven。hadoop前期使用的是ant+ivy,后面改成了maven,在源码包的build文件中有写。下载maven  http://apache.fayea.com/apache ... ar.gz,解压缩到安装目录,在.bashrc中添加以下内容
 export maven_home=/root/software/maven321
 export path=/root/software/maven321/bin:$path 在控制台中输入mvn -version,打印以下信息则安装成功 apache maven 3.2.1 (ea8b2b07643dbb1b84b6d16e1f08391b666bc1e9; 2014-02-15t01:37:52+08:00)
 maven home: /root/software/maven321
 java version: 1.7.0_51, vendor: oracle corporation
 java home: /usr/java/jdk1.7.0_51/jre
 default locale: zh_cn, platform encoding: utf-8
 os name: "linux", version: "2.6.32-431.5.1.el6.x86_64", arch: "amd64", family: "unix" 
4. 安装protobuf-2.5.0,首先安装一下gcc
 yum install gcc
 yum install gcc-c++ 然后下载protocbuf https://protobuf.googlecode.co ... ar.gz 下载完成后解压到安装目录。进入安装目录执行如下命令进行安装 ./configure
  make
  make check
  make install 安装完成后在控制台输入protoc --version,有以下输出则安装成功。安装protoc的原因是要用到它啦,并且官方文档里貌似也没提到,就是编译的时候遇到错误了。并且这里是要编译eclipse项目,如果要编译成可执行的hadoop的话需要安装更多的软件进行支持,详情可以见这里 http://my.oschina.net/cloudcoder/blog/192224 [root@dell ~]# protoc --version
 libprotoc 2.5.0
5. 下面就可以开始编译了,进入到hadoop2.2.0的源码包目录里,ls查看一下,可以看到hadoop-maven-plugins文件夹,先进入到这个文件家,执行mvn install。过程有点长,如果显示说有jar包下载不下来就多
此文来自: 马开东博客 转载请注明出处 网址:http://www.makaidong.com
执行几次,总有下载下来的一天。显示build success后则返回到hadoop-2.2.0-src的根目录下,执行mvn eclipse:eclipse –dskiptests,生成eclipse项目。同样,显示build success后就是编译成功了。
 [root@dell hadoop-2.2.0-src]# ls
 building.txt           hadoop-hdfs-project       hadoop-tools
 dev-support            hadoop-mapreduce-project  hadoop-yarn-project
 hadoop-assemblies      hadoop-maven-plugins      license.txt
 hadoop-client          hadoop-minicluster        notice.txt
 hadoop-common-project  hadoop-project            pom.xml
 hadoop-dist            hadoop-project-dist       readme.txt 
6. 将编译好的项目导入到eclipse中,依次执行[file] > [import] > [existing projects into workspace]即可。由于生成了很多个项目,所以导入后是这个样子的。并且还会有一些错误,下面对如何修复错误写一下。
error#1. hadoop-streaming里面的build path有问题,显示/root/workspace/hadoop-2.2.0-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/conf(missing)
解决办法,remove掉引用就好。
error#2. hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/testdfsclientfailover.java中报sun.net.spi.nameservice.nameservice错误,这是一个需要import的包,存在于openjdk中,在oracle jdk中没找到,需要下载一个。nameservice是一个接口,在网上找一个nameservice放到该包中就好。 http://grepcode.com/file/repos ... rvice
error#3. /hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineeditsviewer/xmleditsvisitor.java里面显示 
import com.sun.org.apache.xml.internal.serialize.outputformat; 
import com.sun.org.apache.xml.internal.serialize.xmlserializer; 
失败,这是由于eclipse的强检查原则,打开java -> compiler -> errors/warnings and under "deprecated and restricted api" change the setting of "forbidden reference (access rules)" 将error级别调整到warning级别就好。
error#4. /hadoop-common/src/test/java/org/apache/hadoop/io/serializer/avro/testavroserialization.java显示没有avrorecord类,在网上搜索到avrorecord类放入到同级包中就行了。  http://grepcode.com/file/repo1 ... ecord
error#5. org.apache.hadoop.ipc.protobuf包是空的,需要在/hadoop-common/target/generated-sources/java中找到profobuf拷贝到/hadoop-common/src/test/java中就好了. 同时包里面还缺少了以下三个引用,在grepcode上找一下,把hadoop-common2.2.0的相应文件下下来导入。
org.apache.hadoop.ipc.protobuf.testprotos.echorequestproto;
org.apache.hadoop.ipc.protobuf.testprotos.echoresponseproto;
org.apache.hadoop.ipc.protobuf.testrpcserviceprotos.testprotobufrpcproto;
error#6. /hadoop-auth/org/apache/hadoop/security/authentication/client/authenricatortestcase.java中显示server.start()和server.stop()错误,还没找到原因所在,待检查~~~

0 个评论

要回复文章请先登录注册