1.首先从 git 下载源码
下载地址:
https://github.com/winghc/hadoop2x-eclipse-plugin百度网盘下载:
链接:http://pan.baidu.com/s/1o6DMY4U 密码:y95i
解压后目录架构如下
[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
进入编译路径下
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
情况都是一样的,编译时成功了,但是无法使用
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
虽然看起来编译成功了,但是就是不能用啊!!!
该文件 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 。 反正笔者我是懒得再搞了,太累了…
参考资料
https://github.com/winghc/hadoop2x-eclipse-plugin
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
release/hadoop-eclipse-kepler-plugin-2.4.1.jar # not tested yet
release/hadoop-eclipse-kepler-plugin-2.2.0.jar
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
启动 eclipse 时加入以下参数
eclipse -clean -consolelog -debug
对于不同版本的 hadoop,调整 ${hadoop2x-eclipse-plugin-master}/ivy/libraries.properties 来匹配 hadoop 依赖库版本
修改 ${hadoop2x-eclipse-plugin}/src/contrib/eclipse-plugin/build.xml, in the node: 来增加所需的 jar 包
源目录在
ant compile-core
第一次失败了
第二次再次尝试,就成功了
成功之后的目录的变化
生成了如下的 jar 包
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_home/src/contrib/eclipse-plugin
目录, 执行
遇到的问题
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
修改 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
但是最终笔者卡在这个地方
参考资料
基于centos 6.2的eclipse-plugin插件各版本编译方:http://zhouyuqin.blog.51cto.com/5132926/1050680
同时需要修改 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/
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.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