(window7中)maven 编译hadoop2.5.0源码
2015-04-22 15:50
393 查看
如果仅仅是源码阅读,可以在eclipse上新建好项目,将下载解压好的src包导入已经存在的项目里即可。
以下仅仅为在window下的编译过程,后来发现在linux下是更方便的。
以下动作是基于 jdk1.7 maven3.05 protoc 2.5环境,请先配置好
关于maven和protoc的配置参考http://www.aboutyun.com/thread-8212-1-1.html
步骤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已经完成。
下面是一些可能遇到的错误以及解决方法
在处理过程中 Apache Hadoop Annotations 项目 failure,后续的所有项目都跳过了,部分错误信息如下(忘记截图)
注意:这里报的是 java.lang.IllegalArgumentException错误,该问题是由环境变了classpath引起的
解决方法:将环境变量classpath中的%JAVA_HOME%改为实际的java_home路径即可
注:还有一种是使用了JDK1.8导致的某个字符串解析错误,根据网络上的说明是jdk1.8无法向下兼容,换成jdk1.7即可
错误2
查看错误信息,原来是执行 mvn install的路径错了,需要再hadoop-maven-plugins下,切换到该目录,果然成功
问题一 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、增加依赖
在
2 增加引用插件的源,在
增加内容如下
3、对eclipse项目进行更新,在e:/hadoop-2.5.0-src目录下 先运行 mvn eclipse:clean 再运行 mvn eclipse:eclipse
之后重新导入eclpise
问题三、 hadoop-streaming 错误 ,在该项目的propertie中移除错误,如下图
问题四、hadoop-common下有一个包叫 protobuf,在我的项目里该包报错,删除该包即可,具体这个包怎么来的不太清楚,可能是在用maven做了各种更新导致的
以下仅仅为在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做了各种更新导致的
相关文章推荐
- hadoop-2.5.0源码编译
- Hadoop入门之Hadoop-2.5.0源码编译
- Maven编译hadoop-2.6.4源码
- maven编译hadoop(2.6.2)源码(二)
- 使用Maven将Hadoop2.2.0源码编译成Eclipse项目
- 使用Maven将Hadoop2.2.0源码编译成Eclipse项目
- Hadoop-2.5.0-cdh5.2.1以及Hadoop-2.5.0-cdh5.3.2 获取源码及编译
- SVN checkout hadoop源码及Maven进行Hadoop源代码编译步骤
- maven编译hadoop(2.6.2)源码(一)
- hadoop-2.5.0源码编译
- hadoop-2.5.0源码编译
- Hadoop-2.5.0-cdh5.2.0 获取源码及编译
- 使用Maven将Hadoop2.2.0源码编译成Eclipse项目
- eclipse maven 编译hadoop源码
- hadoop-2.5.0源码编译
- centos 6 环境下用maven编译安装hadoop2.7.2源码包
- hadoop源码编译--maven安装
- hadoop-2.5.0源码编译
- hadoop源码编译——2.5.0版本
- hadoop2.5.0源码编译