您的位置:首页 > 运维架构

(window7中)maven 编译hadoop2.5.0源码

2015-04-22 15:50 393 查看
如果仅仅是源码阅读,可以在eclipse上新建好项目,将下载解压好的src包导入已经存在的项目里即可。

以下仅仅为在window下的编译过程,后来发现在linux下是更方便的。

准备工作

下载src.tar.gz 文件,并且解压 下载路径 http://archive.apache.org/dist/hadoop/core/hadoop-2.5.0/

以下动作是基于 jdk1.7 maven3.05 protoc 2.5环境,请先配置好

关于maven和protoc的配置参考http://www.aboutyun.com/thread-8212-1-1.html

基本操作流程

windos下解压hadoop-2.5.0-src.tar.gz文件后路径如下



步骤1、cmd 切换到hadoop项目的根目录 e:/hadoop-2.5.0-src

mvn package -Pdist -DskipTests -Dtar 这个命令是将hadoop代码打包成jar,运行该命令会根据该目录的所有pom.xml下载相关的资源



步骤2、切换到 e:/hadoop-2.5.0-src/hadoop-maven-plugins

运行 mvn install ,该命令有两个作用,第一个跟mvn package相似打包成jar,第二个是将打包的jar加载到maven的本地仓库中去



使用mvn install 应该是会下载资源一致的

步骤3、切换回e:/hadoop-2.5.0-src 创建myeclipse项目

mvn eclipse:eclipse -DskipTests

步骤4、导入Myeclipse

file →import 选择General下的Existing Projects into Workplace点击next,选择一个根目录,导入所有的项目



正常情况下,hadoop源码的导入eclipse已经完成。

下面是一些可能遇到的错误以及解决方法

关于maven错误

错误1

在处理过程中 Apache Hadoop Annotations 项目 failure,后续的所有项目都跳过了,部分错误信息如下(忘记截图)

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.8.1:jar (module-javadocs) on project hadoop-maven-plugins
....
[INFO] An error has occurred in JavaDocs report generation:Exit code: 1 - java.lang.IllegalArgumentException
   at sun.net.www.ParseUtil.decode(ParseUtil.java:189)
   at sun.misc.URLClassPath$FileLoader.(URLClassPath.java:953)
   at sun.misc.URLClassPath$3.run(URLClassPath.java:326)


注意:这里报的是 java.lang.IllegalArgumentException错误,该问题是由环境变了classpath引起的

解决方法:将环境变量classpath中的%JAVA_HOME%改为实际的java_home路径即可

注:还有一种是使用了JDK1.8导致的某个字符串解析错误,根据网络上的说明是jdk1.8无法向下兼容,换成jdk1.7即可

错误2

[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2:exec (com
pile-ms-winutils) on project hadoop-common: Command execution failed. Cannot run
program "msbuild" (in directory "E:\hadoop-2.5.0-src\hadoop-common-project\hado
op-common"): CreateProcess error=2, ????????? -> [Help 1]




查看错误信息,原来是执行 mvn install的路径错了,需要再hadoop-maven-plugins下,切换到该目录,果然成功

关于导入myeclipse的错误

参考文档 http://www.2cto.com/database/201410/347773.html


问题一 hadoop-commom项目下,ipc.protobuf为空,导致引用该包的对应类错误,原因是 org.apache.hadoop.ipc.protobuf无法解析



解决方法:

对应的类存放位置为 e:/hadoop-2.5.0-src/hadoop-common-project/hadoop-common/src/test/proto

这里使用protoc进行编译,进入protoc的目录

运行命令 protoc –java_out= e:/hadoop-2.5.0-src/hadoop-common-project/hadoop-common/src/test/proto/java *.proto

由于切换到 proto目录发现protoc无法运行,可能是环境变量未配置好



将protco安装目录下的src目录找到文件 protoc.exe 复制到 e:/hadoop-2.5.0-src/hadoop-common-project/hadoop-common/src/test/proto

运行如下命令,可以看到protoc –version运行成功



确认protoc可以运行后,在当前目录下运行 protoc –java_out =../java *.proto 如上图

由于不知道如何在MyEclipse中直接更新这种复制过来的maven项目,所以只能重新更新一遍然后导入

切换回 E:/hadoop-2.5.0-src 先运行命令 mvn eclipse:clean

再重新运行 mvn eclipse:eclipse生成eclipse项目

删除Myeclipse中的hadoop-commom项目后重新导入,结果如下,可以看到ipc.protobuf包已经为非空



问题二 AvroRecord 类缺失



出现这种情况是因为存在 avro-tools-*.jar 等相关依赖没有,这个时候解决该问题有两种方法,可以选择自己编译对应的jar,也可以修改pom.xml文件,这里选择的是第二种

解决方案

修改 E:\hadoop-2.5.0-src\hadoop-common-project\hadoop-common 下的pom.xml 文件

1、增加依赖

<dependencies></dependencies>
内增加

<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro</artifactId>
<version>1.7.4</version>
</dependency>




2 增加引用插件的源,在
<plugins></plugins>
内增加如下内容(注意,可能已经存在,如果存在覆盖即可)

增加内容如下

<plugin>
<groupId>org.apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
<version>1.7.4</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>schema</goal>
</goals>
<configuration>
<sourceDirectory>${project.basedir}/src/main/avro/</sourceDirectory>
<outputDirectory>${project.basedir}/src/main/java/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>




3、对eclipse项目进行更新,在e:/hadoop-2.5.0-src目录下 先运行 mvn eclipse:clean 再运行 mvn eclipse:eclipse

之后重新导入eclpise

问题三、 hadoop-streaming 错误 ,在该项目的propertie中移除错误,如下图



问题四、hadoop-common下有一个包叫 protobuf,在我的项目里该包报错,删除该包即可,具体这个包怎么来的不太清楚,可能是在用maven做了各种更新导致的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: