编译 Hadoop Eclipse Plugin

  • 一 前期准备
  • 二 编译 Hadoop
    • 1 编译 hadoop-220
    • 2 编译 hadoop-251 和 hadoop-260
    • 3 编译 hadoop-250-cdh532
  • 三 大神的资料
    • 1 如何编译
    • 2 包含的相关版本
    • 3 需要的条件
    • 4 如何调试
    • 5 注意事项
  • 四 第二次编译
    • 1 前期准备及编译
    • 2 网络上搜集到的信息
    • 3 资料二

一. 前期准备

1.首先从 git 下载源码
下载地址:
https://github.com/winghc/hadoop2x-eclipse-plugin百度网盘下载:
链接:http://pan.baidu.com/s/1o6DMY4U 密码:y95i

解压后目录架构如下

编译 Hadoop Eclipse Plugin_第1张图片

[hadoop5@master5 src]$ tree -L 4 -a
.
├── contrib
│   ├── build-contrib.xml
│   ├── build.xml
│   └── eclipse-plugin
│       ├── bin
│       │   ├── build.properties
│       │   ├── build.xml
│       │   ├── build.xml.bak
│       │   ├── .classpath
│       │   ├── ivy
│       │   ├── ivy.xml
│       │   ├── makePlus.sh
│       │   ├── META-INF
│       │   ├── plugin.xml
│       │   ├── .project
│       │   ├── resources
│       │   ├── .settings
│       │   └── src
│       ├── build.properties
│       ├── build.xml
│       ├── build.xml.bak
│       ├── .classpath
│       ├── ivy
│       │   └── libraries.properties
│       ├── ivy.xml
│       ├── makePlus.sh
│       ├── META-INF
│       │   └── MANIFEST.MF
│       ├── plugin.xml
│       ├── .project
│       ├── resources
│       ├── .settings
│       └── src
│           └── java
├── ivy
│   ├── hadoop-client-pom-template.xml
│   ├── hadoop-core.pom
│   ├── hadoop-core-pom-template.xml
│   ├── hadoop-examples-pom-template.xml
│   ├── hadoop-minicluster-pom-template.xml
│   ├── hadoop-streaming-pom-template.xml
│   ├── hadoop-test-pom-template.xml
│   ├── hadoop-tools-pom-template.xml
│   ├── ivysettings.xml
│   └── libraries.properties
└── ivy.xml

2. 下载 ant-1.9.6
下载地址:http://mirrors.noc.im/apache//ant/binaries/apache-ant-1.9.6-bin.tar.gz

安装,并设置环境变量

export ANT_HOME=/home/hadoop5/softwares/ant
export PATH=${ANT_HOME}/bin:$PATH

二. 编译 Hadoop

2.1 编译 hadoop-2.2.0

进入编译路径下

cd /home/hadoop5/compile/hadoop2x-eclipse-plugin/src/contrib/eclipse-plugin

然后进行编译,以下参数根据实际环境进行设置

ant jar -Dversion=2.2.0 \
-Dhadoop.version=2.2.0 \ -Declipse.home=/home/hadoop5/softwares/eclipse \ -Dhadoop.home=/home/hadoop5/compile/hadoop-2.2.0

这里写图片描述 很顺利嘛,亲测可用~

contrib/eclipse-plugin 路径下可以看到生成的 jar 包

/home/hadoop5/compile/hadoop2x-eclipse-plugin/build/contrib/eclipse-plugin

编译 Hadoop Eclipse Plugin_第2张图片

2.2 编译 hadoop-2.5.1 和 hadoop-2.6.0

情况都是一样的,编译时成功了,但是无法使用

编译 Hadoop Eclipse Plugin_第3张图片

2.3 编译 hadoop-2.5.0-cdh5.3.2

ant jar -Dversion=2.5.0-cdh5.2.0\
-Dversion=2.5.0-cdh5.2.0 \ -Declipse.home=/home/hadoop5/softwares/eclipse \ -Dhadoop.home=/home/hadoop5/softwares/hadoop-2.5.0-cdh5.2.0

编译 Hadoop Eclipse Plugin_第4张图片

虽然看起来编译成功了,但是就是不能用啊!!!

编译 Hadoop Eclipse Plugin_第5张图片

编译 Hadoop Eclipse Plugin_第6张图片

该文件 28M ,从大小上来看,貌似准确无误。但是真正放在 eclipse/plugin 目录下,重启 Eclipse 后,能看到该插件,但是无法创建 New Location

看 eclipse 的启动日志,这个日志在 workplace 中的 .metadata 文件下的 .log 文件,报如下错误

Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.eclipse.servers.ServerRegistry

解决办法参考 Hadoop2.4.0 Eclipse插件制作及问题记录:http://www.aboutyun.com/thread-7780-1-1.html 。 反正笔者我是懒得再搞了,太累了…

参考资料

  • Hadoop2.5 Eclipse插件制作:http://www.aboutyun.com/thread-8780-1-1.html
  • 编译hadoop的eclipse插件hadoop-eclipse-plugin-1.2.1.jar :http://blog.csdn.net/wind520/article/details/38759149
  • 手动制作hadoop-eclipse-plugin1.1.2插件:http://my.oschina.net/vigiles/blog/132238?fromerr=ChHV6Nyn
  • 使用 ant 及 hadoop1.1.2 制作 eclipse 插件错误(已解决):http://www.oschina.net/question/256028_110890

三. 大神的资料

https://github.com/winghc/hadoop2x-eclipse-plugin

3.1 如何编译

 cd src/contrib/eclipse-plugin 

假设 hadoop 安装在 /usr/share/hadoop

ant jar -Dversion=2.4.1 -Dhadoop.version=2.4.1 -Declipse.home=/opt/eclipse -Dhadoop.home=/usr/share/hadoop

最终 jar 包会生成在以下路径

${hadoop2x-eclipse-plugin}/build/contrib/eclipse-plugin/hadoop-eclipse-plugin-2.4.1.jar

3.2 包含的相关版本

release/hadoop-eclipse-kepler-plugin-2.4.1.jar # not tested yet

release/hadoop-eclipse-kepler-plugin-2.2.0.jar 

3.3 需要的条件

version: plugin version

hadoop.version: hadoop version you want to compiled with

eclipse.home: path of eclipse home

hadoop.home: path of hadoop 2.x home

3.4 如何调试

启动 eclipse 时加入以下参数

eclipse -clean -consolelog -debug

3.5 注意事项

  • 对于不同版本的 hadoop,调整 ${hadoop2x-eclipse-plugin-master}/ivy/libraries.properties 来匹配 hadoop 依赖库版本

  • 修改 ${hadoop2x-eclipse-plugin}/src/contrib/eclipse-plugin/build.xml, in the node: 来增加所需的 jar 包

四. 第二次编译

4.1 前期准备及编译

源目录在

编译 Hadoop Eclipse Plugin_第7张图片

ant compile-core

第一次失败了

编译 Hadoop Eclipse Plugin_第8张图片

第二次再次尝试,就成功了

编译 Hadoop Eclipse Plugin_第9张图片
编译 Hadoop Eclipse Plugin_第10张图片

成功之后的目录的变化

编译 Hadoop Eclipse Plugin_第11张图片

生成了如下的 jar 包

编译 Hadoop Eclipse Plugin_第12张图片

这里写图片描述

cd /home/hadoop5/softwares/hadoop-2.5.0-cdh5.2.0/
find ./ -name '*hadoop-core*' -name '*jar*'

这里写图片描述

cd /home/hadoop5/softwares/hadoop-2.5.0-cdh5.2.0/share/hadoop/mapreduce1
cp hadoop-core-2.5.0-mr1-cdh5.2.0.jar ~/softwares/hadoop-2.5.0-cdh5.2.0/src/hadoop-mapreduce1-project/build/ivy/lib/Hadoop/common/

然后开始编译插件

ant jar -Declipse.home=/home/hadoop5/softwares/eclipse  -Dversion=2.5.0-mr1-cdh5.2.0 

编译 Hadoop Eclipse Plugin_第13张图片

进入$Hadoop_home/src/contrib/eclipse-plugin 目录, 执行

编译 Hadoop Eclipse Plugin_第14张图片

遇到的问题

这里写图片描述

这里写图片描述

http://stackoverflow.com/questions/18852338/ant-build-for-eclipse-cant-resolve-log4j

原因:

Your ivy plugin cannot able to resolve the url ${reactor.repo}/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.pom. Check the variable reactor.repo is set.

解决办法:

vim /home/hadoop5/softwares/hadoop-2.5.0-cdh5.2.0/src/hadoop-mapreduce1-project/src/contrib/eclipse-plugin/build.properties
reactor.repo = https://repository.cloudera.com/content/repositories/snapshots
version=2.5.0-mr1-cdh5.2.0
eclipse.home=/home/hadoop5/softwares/eclipse

编译 Hadoop Eclipse Plugin_第15张图片

修改 build.xml

http://www.oschina.net/question/256028_110890

这里写图片描述

这是因为配置文件设置有问题,下一条的 <copy file> 和上一条的 <copy file> 之间不能有空格

vim /home/hadoop5/softwares/hadoop-2.5.0-cdh5.2.0/src/hadoop-mapreduce1-project/build.xml

编译 Hadoop Eclipse Plugin_第16张图片

但是最终笔者卡在这个地方

编译 Hadoop Eclipse Plugin_第17张图片

参考资料

基于centos 6.2的eclipse-plugin插件各版本编译方:http://zhouyuqin.blog.51cto.com/5132926/1050680

4.2 网络上搜集到的信息

同时需要修改 src/contrib/eclipse-plugin/build.xml 文件,增加两处修改具体如下:

<import file="../build-contrib.xml"/>
  <!-- ex-jar 是需要增加的配置 micmiu.com-->
  <path id="ex-jars">
    <fileset dir="./">
      <include name="org.eclipse.jdt*.jar"/>
    </fileset> 
  </path>

 ......

  <!-- Override classpath to include Eclipse SDK jars -->
  <path id="classpath">
    <pathelement location="${build.classes}"/>
    <!--pathelement location="${hadoop.root}/build/classes"/-->
    <path refid="eclipse-sdk-jars"/>
    <path refid="hadoop-sdk-jars"/>
    <!-- 需要增加的配置 micmiu.com-->
    <path refid="ex-jars"/>
  </path>

援引:http://www.micmiu.com/bigdata/hadoop/hadoop2-x-eclipse-plugin-build-install/

4.3 资料二

1)hadoop的eclipse插件源码位于hadoop.home(这里的hadoop.home为你的hadoop主目录)/src/contrib/eclipse-plugin。

我们找到 <target name="jar",里面的元素<copy相关的先全部删了,然后添加如下的,当然,这里的 hadoop-core-XXX.jar,这个 XXX 是版本号,请根据你下载的 hadoop 的版本进行设置,也可以在后面的 build-contrib.xml 中进行设置,这里用变量进行替换,等一下我们再看。

    <copy file="${hadoop.root}/hadoop-core-1.1.2.jar" tofile="${build.dir}/lib/hadoop-core.jar" verbose="true"/>  
        <copy file="${hadoop.root}/lib/commons-cli-1.2.jar"  todir="${build.dir}/lib" verbose="true"/>  
        <copy file="${hadoop.root}/lib/commons-configuration-1.6.jar" tofile="${build.dir}/lib/commons-configuration-1.6.jar" verbose="true"/>  
        <copy file="${hadoop.root}/lib/commons-httpclient-3.0.1.jar" tofile="${build.dir}/lib/commons-httpclient-3.0.1.jar" verbose="true"/>  
        <copy file="${hadoop.root}/lib/commons-lang-2.4.jar" tofile="${build.dir}/lib/commons-lang-2.4.jar" verbose="true"/>  
        <copy file="${hadoop.root}/lib/jackson-core-asl-1.8.8.jar" tofile="${build.dir}/lib/jackson-core-asl-1.8.8.jar" verbose="true"/>  
        <copy file="${hadoop.root}/lib/jackson-mapper-asl-1.8.8.jar" tofile="${build.dir}/lib/jackson-mapper-asl-1.8.8.jar" verbose="true"/>  

网上很多文章都说只要这一步就OK了,但实验证明,我们编译的时候会出现找不到类的情况,主要是没有加载那些JAR包。

2)添加 JAR 包到 classpath

还是 build.xml 文件中,我们找到 <path id="classpath"> 在其末尾加上:

<fileset dir="${hadoop.root}">    
       <include name="*.jar"/>    
</fileset>  

这里把 hadoop 根目录下的所有 JAR 包加入到 classpath

3)改完上面的,当我们在编译的时候,那些需要的 JAR 包并没有同时添加到生成的 JAR 内,这样会有错误,所以我们要修改 MANIFIEST.MF 文件,相信搞过可运行 JAR 包的朋友都清楚这个文件用一个 JAR 来说是多么的重要。

在同级目录下找到 META-INF/MANIFEST.MF,找到 Bundle-ClassPath:,然后添加如下:

classes/,lib/hadoop-core.jar,lib/commons-configuration-1.6.jar,lib/commons-httpclient-3.0.1.jar,lib/commons-lang-2.4.jar,lib/jackson-core-asl-1.8.8.jar,lib/commons-cli-1.2.jar

注意,这一大段不要换行,否则在生成JAR包时会报错。

4)加完这些,可以说实际上编译就已经 OK 了,但我们需要跟特定的 eclipse 相结合,所以我们需要配置 eclipse 的路径,回到我们刚才 build.xml 文件的上层文件夹,也就是 hadoop.home/src/contrib文件夹下。

找到 build-contrib.xml 文件,找到 project,在 property 最前面加多一个:

<property name="eclipse.home" value="D:/developerTools/eclipse/eclipse" />  

这里的 D:/xxx 是我的 eclipse 安装路径。接下来就开始我们正式的编译工作了,假设 ant 那些我们都配置好了,已经在 path 中了,并且 ant 版本高于 1.7.2(建议下最新的)

编译 Hadoop Eclipse Plugin_第18张图片

这里已经生成成功了,接下来我们就可以到 hadoop.home/build/contrib/eclipse-plugin下找到hadoop-eclipse-plugin-${version}.jar 这样的一个文件,${version} 是什么来的?

这里就涉及到一个前面说的版本变量的问题,我们在 build-contrib.xml 的 eclipse.home 下面添加一个:

<property name="version" value="1.1.2" />  

这里的版本号请根据你自己下的版本来填,填好后,我们再生成后,就可以看到 hadoop-eclipse-plugin-1.1.2.jar 这样的一个 JAR 包,这个版本号根据你设的 version 值来生成的。

我在另外一台电脑编译时,遇到了报找不到 log4j 配置文件的错误,类似什么 master 之类的, 可以尝试修改 ivy.xml,把里面的 dependency 里面的 conf 里面的 master 修改为 default,一般就可以解决了,这个暂时没发现是什么造成的,遇到类似的问题就可以找找 ivy.xml 里面的问题。

援引:http://cxshun.iteye.com/blog/1876366

你可能感兴趣的:(编译 Hadoop Eclipse Plugin)