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

来源:互联网 发布:rstudio数据恢复官网 编辑:程序博客网 时间:2024/05/16 17:49

如果仅仅是源码阅读,可以在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 (compile-ms-winutils) on project hadoop-common: Command execution failed. Cannot run program "msbuild" (in directory "E:\hadoop-2.5.0-src\hadoop-common-project\hadoop-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做了各种更新导致的

0 0