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插件的主要内容,如果未能解决你的问题,请参考以下文章

LINUX下载编译ant

LINUX下载ant源码并编译

hadoop1.2 eclipse插件编译

Zookeeper源码编译为Eclipse工程(win7下Ant编译)

Linux学习心得之 Linux下ant安装与使用

ant详细介绍