Linux下Ant编译Hadoop-eclipse-plugin-2.x.x.jar插件
Posted 莫西里
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下Ant编译Hadoop-eclipse-plugin-2.x.x.jar插件相关的知识,希望对你有一定的参考价值。
一、介绍
因为一开始想做关于MapReduce任务的远程提交,在这个过程中有幸试验了Hadoop2.x 版本的eclipse 插件的编译方法,这里总结一下,方便新手学习
二、过程
1、下载Hadoop2.x plugin的源代码:https://github.com/winghc/hadoop2x-eclipse-plugin,并解压到相应的文件夹内
2、安装ant,该步骤用户可以自己去百度一下
3、进入到该文件夹中,然后进入ivy文件夹中,通过vim编译器开发libraries.properties,该文件中记录了对Hadoop2.x编译插件时所需要的模块jar包的版本号,这里我们需要一个个都对比进行修改。主要修改的下面三个组件的版本:
#htrace.version=3.0.4
htrace.version=3.1.0-incubating
#slf4j-api.version=1.7.5
#slf4j-log4j12.version=1.7.5
slf4j-api.version=1.7.10
slf4j-log4j12.version=1.7.10
#号表示原来的版本后,而紧跟着的语句则是hadoop-2.7.1中使用的版本,不过觉得最好是用户将有的jar包进行对比
4、进行编辑打包
(1)从ivy文件夹中,进入到 ../src/contrib/eclipse-plugin/ 文件夹中,在该文件夹中执行下属的命令:
ant jar -Dversion=2.7.1 -Dhadoop.version=2.7.1 -Declipse.home=/opt/eclipse -Dhadoop.home=/opt/hadoop-2.7.1
在该命令中,hadoop.version执行hadoop的版本号,eclipse.home指定eclipse的家目录位置,编译过程中需要使用eclipse相应的jar,hadoop.home则是编译过程中刚才修改的build.xml文件中jar包的来源位置。执行完这个命令以后,会发现会一直停留在一个 commons的位置上,这是因为缺少相关编译操作所致。
(2)修改build.xml文件,
打开build.xml文件,找到下面的位置:
<target name="compile" depends="init, ivy-retrieve-common" unless="skip.contrib">
<echo message="contrib: $name"/>
<javac
encoding="$build.encoding"
srcdir="$src.dir"
includes="**/*.java"
destdir="$build.classes"
debug="$javac.debug"
deprecation="$javac.deprecation">
<classpath refid="classpath"/>
</javac>
</target>
这ant编译中 depends中的两个选项都是buld.xml文件中的target标签动作,即<target name="init"></target>,但是该文件中并没有含有相关的操作,因此需要把这两个以来进行删除,然后保存文件
(3)继续进行编译
然后重新执行上述的编译命令,然后就会编译成功,然后回到项目的更目录下,然后进入到build文件中,就能看到相应的编译过程和最后的jar包。
5、修改编译jar包
当编译出自己的jar后,发现在连接hdfs是出现NullExpection的异常,笔者与网上下载的插件jar进行了对比,发现了少了三个jar包:
servlet-api-2.5.jar
commons-httpclient-3.1.jar
commons-io-2.4.jar
就是因为少了这三个jar包,因此插件在于hdfs进行连接的过程中出现异常报错。所以要重新修改我们所编译的jar包:
(1)回到项目根目录中,然后进入build/lib 文件夹中,然后从hadoop中将缺少的三个包文件添加到该文件夹中
(2)进入到../../src/contrib/eclipse-plugin/ 文件夹中,然后重新进行编译,然后就会生成新的插件jar包。
(3)将该插件放到windows环境下,使用压缩工具打开,查看插件中是否含有45个jar包,即是否包含了上述缺少的三个jar包
(4)然后进入到META-INF文件夹中,通过查看器对MANIFEST.MF 文件进行修改:
Bundle-ClassPath: classes/, lib/hadoop-mapreduce-client-core-2.7.1.ja
r, lib/hadoop-mapreduce-client-common-2.7.1.jar, lib/hadoop-mapredu
ce-client-jobclient-2.7.1.jar, lib/hadoop-auth-2.7.1.jar, lib/hadoo
p-common-2.7.1.jar, lib/hadoop-hdfs-2.7.1.jar, lib/protobuf-java-2.
5.0.jar, lib/log4j-1.2.17.jar, lib/commons-cli-1.2.jar, lib/common
s-configuration-1.6.jar, lib/commons-httpclient-3.1.jar, lib/common
s-lang-2.6.jar, lib/commons-io-2.4.jar, lib/commons-collections-3.2
.1.jar, lib/jackson-core-asl-1.9.13.jar, lib/jackson-mapper-asl-1.9
.13.jar, lib/slf4j-log4j12-1.7.10.jar, lib/slf4j-api-1.7.10.jar, l
ib/guava-11.0.2.jar, lib/netty-3.6.2.Final.jar, lib/htrace-core-3.1
.0-incubating.jar, lib/servlet-api-2.5.jar
将着三个jar包放入到也放入到上述的环境变量中,完后修改后该 hadoop 2.7.1 的ecplse插件就可以使用了
以上是关于Linux下Ant编译Hadoop-eclipse-plugin-2.x.x.jar插件的主要内容,如果未能解决你的问题,请参考以下文章