我按原作者的方法做到最后成功了,但是中间遇到了很多问题,这里在开头先说一下。
一、1.2.1的jdk版本必须是1.7,1.6的不行,至少我尝试的openJDK1.6没有成功。
二、编译插件之前环境变量配置要仔细,作者讲的在build.xml下的添加那三行代码,在第一组proper后添加都行的。
三、关于作者在最后讲登录不成功,以及添加插件后出现问题,我这里给大家提供一个方法,在eclipse有改动后,再启动时 用
eclipse -clean的方法可以解决相关问题。
四、配置的时候启动hadoop与否我认为并没影响。
同样,也可以尝试这样的编译方式,我也推荐这种,大家看起来可能更友好。
文章链接:http://hanlaiming.freetzi.com/?p=115
下面是原作者关于插件的配置方法,感谢原作者。
原文链接:http://blog.csdn.net/summerdg/article/details/12874841
首先我是在ubuntu的虚拟机下工作的,准备工作一定要做好。
一、安装jdk,此处我一开始是利用sudo apt-get
install
openjdk-7-jre,这样做主要是为了方便,省的配置路径,但这给后边的编译造成了麻烦,请大家注意我这里只是安装了JRE,没有安装JDK,所以必须再执行sudo
apt-get install
openjdk-7-jdk,这样才能把jdk成功安装上去,否则在后边变异的时候会出现javac编译不成功或者不存在之类的错误。
二、这里通常其他文章会说安装ant,但是ubuntu通常情况下会自带ant,而且版本比较高,所以我在这里就不说了。
三、再下来就是安装eclipse,在这里我要强调一下,不
是所有eclipse的版本对hadoop都有支持,所以选择对的eclipse版本占到了成功的70%,就像我一开始选择
eclipse3.7Indigo不论后边如何配置正确都会编译失败,原因是该版本eclipse本来就有些包不存在,你要自己下载,会浪费时间,而且即
使下载下来,他的包也不是只在/plugins下,是被分在几个文件里的(从openstock上得知),所以网上的配置都不会生效。而这个版本又是
ubuntu12利用apt-get
install下载的默认版本,所以会造成很多问题。最后我把这个版本完完全全从机子上卸载掉,下载了eclipse4.2Juno,只需要下载
classic版本就可以了其他的没必要。从官网上把该版本对应的压缩包下载到机子上解压就可以了。注:据说eclipse4.3对hadoop的支持又
不好了,所以最好还是选择4.2吧。
四、下载hadoop源码,我下载的是1.2.1稳定版本,大家一定要选择源码,因为官网会提供编译好的版本和源码两个版本,编译插件要选用源码版本,
就是名字中没有bin的版本。在下载的时候也会有问题,就是可能有下载不全的时候,这时tar包在解压的时候会出现错误,如果是这样,就苦逼的在下载一遍
吧。
五、这一步就是其他文章都会提到的了,配置很简单,但有些文章说的太少,配置的根本有问题,有些文章说的太多,很多重复的东西。
(1)配置/${hadoop-home}/src/contrib/eclipse-plugins/build.xml
找到
然后添加
- <fileset dir="${hadoop.root}/">
-
<include name="*.jar"/>
- fileset>
这一步很重要,如果不添加的话会出现找不到相应的程序包,错误如下(给出部分):
-
[javac] Counters.Group group = counters.getGroup(groupName);
-
[javac] ^
-
[javac] /home
/summerdg/hadoop_src/hadoop-1.2.1/src/contrib/eclipse-plugin/src/java
/org/apache/hadoop/eclipse/server/HadoopJob.java:305: 错误: 程序包Counters不存
在
-
[javac] for (Counters.Counter counter : group) {
-
[javac] ^
-
[javac] /home
/summerdg/hadoop_src/hadoop-1.2.1/src/contrib/eclipse-plugin/src/java
/org/apache/hadoop/eclipse/dfs/DFSFile.java:74: 错误: 找不到符号
-
[javac] FileStatus fs = getDFS().getFileStatus(path);
-
[javac] ^
-
[javac] 符号: 类 FileStatus
-
[javac] 位置: 类 DFSFile
-
[javac] 注: 某些输入文件使用或覆盖了已过时的 API。
-
[javac] 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
-
[javac] 注: 某些输入文件使用了未经检查或不安全的操作。
-
[javac] 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
-
[javac] 100 个错误
当然,出现这个错误还有个原因,
就是你已经设置了这句,但你依然出现这个错误,那就是你eclipse版本的问题了。
找到
- <target name="jar" depends="compile" unless="skip.contrib">
删除或者注释掉下边的两个
- <copy file="${hadoop.root}/hadoop-core-${version}.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-lang-2.4.jar" todir="${build.dir}/lib" verbose="true"/>
- <copy file="${hadoop.root}/lib/commons-configuration-1.6.jar" todir="${build.dir}/lib" verbose="true"/>
- <copy file="${hadoop.root}/lib/jackson-mapper-asl-1.8.8.jar" todir="${build.dir}/lib" verbose="true"/>
- <copy file="${hadoop.root}/lib/jackson-core-asl-1.8.8.jar" todir="${build.dir}/lib" verbose="true"/>
- <copy file="${hadoop.root}/lib/commons-httpclient-3.0.1.jar" todir="${build.dir}/lib" verbose="true"/>
最后修改过的build.xml如下:
-
?xml version="1.0" encoding="UTF-8" standalone="no"?>
-
-
<!--
-
Licensed to the Apache Software Foundation (ASF) under one or more
-
contributor license agreements. See the NOTICE file distributed with
-
this work for additional information regarding copyright ownership.
-
The ASF licenses this file to You under the Apache License, Version 2.0
-
(the "License"); you may not use this file except in compliance with
-
the License. You may obtain a copy of the License at
-
-
http://www.apache.org/licenses/LICENSE-2.0
-
-
Unless required by applicable law or agreed to in writing, software
-
distributed under the License is distributed on an "AS IS" BASIS,
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-
See the License for the specific language governing permissions and
-
limitations under the License.
- -->
-
- <project default="jar" name="eclipse-plugin">
-
- <import file="../build-contrib.xml"/>
-
- <path id="eclipse-sdk-jars">
-
<fileset dir="${eclipse.home}/plugins/">
-
<include name="org.eclipse.ui*.jar"/>
-
<include name="org.eclipse.jdt*.jar"/>
-
<include name="org.eclipse.core*.jar"/>
-
<include name="org.eclipse.equinox*.jar"/>
-
<include name="org.eclipse.debug*.jar"/>
-
<include name="org.eclipse.osgi*.jar"/>
-
<include name="org.eclipse.swt*.jar"/>
-
<include name="org.eclipse.jface*.jar"/>
-
-
<include name="org.eclipse.team.cvs.ssh2*.jar"/>
-
<include name="com.jcraft.jsch*.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"/>
-
<fileset dir="${hadoop.root}/">
-
<include name="*.jar"/>
-
fileset>
-
-
path>
-
-
<!-- Skip building if eclipse.home is unset. -->
- <target name="check-contrib" unless="eclipse.home">
-
<property name="skip.contrib" value="yes"/>
-
<echo message="eclipse.home unset: skipping eclipse plugin"/>
-
target>
-
- <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>
-
- <!-- Override jar target to specify manifest -->
-
<target name="jar" depends="compile" unless="skip.contrib">
-
<mkdir dir="${build.dir}/lib"/>
-
<!-- <copy file="${hadoop.root}/build/hadoop-core-${version}.jar" tofile="${build.dir}/lib/hadoop-core.jar" verbose="true"/>
-
<copy file="${hadoop.root}/build/ivy/lib/Hadoop/common/commons-cli-${commons-cli.version}.jar" todir="${build.dir}/lib" verbose="true"/>-->
-
<copy file="${hadoop.root}/hadoop-core-${version}.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-lang-2.4.jar" todir="${build.dir}/lib" verbose="true"/>
-
<copy file="${hadoop.root}/lib/commons-configuration-1.6.jar" todir="${build.dir}/lib" verbose="true"/>
-
<copy file="${hadoop.root}/lib/jackson-mapper-asl-1.8.8.jar" todir="${build.dir}/lib" verbose="true"/>
-
<copy file="${hadoop.root}/lib/jackson-core-asl-1.8.8.jar" todir="${build.dir}/lib" verbose="true"/>
-
<copy file="${hadoop.root}/lib/commons-httpclient-3.0.1.jar" todir="${build.dir}/lib" verbose="true"/>
-
<jar
-
jarfile="${build.dir}/hadoop-${name}-${version}.jar"
-
manifest="${root}/META-INF/MANIFEST.MF">
-
<fileset dir="${build.dir}" includes="classes/ lib/"/>
-
<fileset dir="${root}" includes="resources/ plugin.xml"/>
-
jar>
- target>
-
- project>
(2)
配置/${hadoop-home}/src/contrib/build-contrib.xml
指定hadoop版本和eclipse路径,添加:
- <property name="version" value="1.2.1"/>
- <property name="ivy.version" value="2.1.0"/>
-
<property name="eclipse.home" location="/home/summerdg/eclipse"/>
location下面是eclipse的解压路径。
(3)配置/${hadoop-home}/src/contrib/eclipse-plugins/META-INF/MANIFEST.MF
在Bundle-ClassPath:
classes/,lib/hadoop-core.jar后边添加lib/jackson-core-asl-1.8.8.jar
,lib/jackson-mapper-asl-1.8.8.jar,
lib/commons-configuration-1.6.jar,lib/commons-lang-2.4.jar,
lib/commons-httpclient-3.0.1.jar,lib/commons-cli-1.2.jar,其他文章说不能另起一行,要紧挨
着,所以最后该文件的样子就是:
-
Manifest-Version: 1.0
-
Bundle-ManifestVersion: 2
-
Bundle-Name: MapReduce Tools for Eclipse
-
Bundle-SymbolicName: org.apache.hadoop.eclipse;singleton:=true
-
Bundle-Version: 0.18
-
Bundle-Activator: org.apache.hadoop.eclipse.Activator
-
Bundle-Localization: plugin
-
Require-Bundle: org.eclipse.ui,
-
org.eclipse.core.runtime,
-
org.eclipse.jdt.launching,
-
org.eclipse.debug.core,
-
org.eclipse.jdt,
-
org.eclipse.jdt.core,
-
org.eclipse.core.resources,
-
org.eclipse.ui.ide,
-
org.eclipse.jdt.ui,
-
org.eclipse.debug.ui,
-
org.eclipse.jdt.debug.ui,
-
org.eclipse.core.expressions,
-
org.eclipse.ui.cheatsheets,
-
org.eclipse.ui.console,
-
org.eclipse.ui.navigator,
-
org.eclipse.core.filesystem,
-
org.apache.commons.logging
-
Eclipse-LazyStart: true
-
Bundle-ClassPath: classes/,lib/hadoop-core.jar,lib/jackson-core-asl-1.8.8.jar ,lib/jackson-mapper-asl-1.8.8.jar, lib/commons-configuration-1.6.jar,lib/commons-lang-2.4.jar, lib/commons-httpclient-3.0.1.jar,lib/commons-cli-1.2.jar
-
Bundle-Vendor: Apache Hadoop
(4)然后在
/${hadoop-home}/src/contrib/eclipse-plugins/下运行ant或者ant
jar
即使这样还是会出现问题,如果提示ivy的版本问题,类似于ivy的版本要高于2.0,只需要到/${hadoop-home}/ivy下把ivy-2.1.0.jar删除掉就可以了,不用从官网下载ivy-2.1.0.jar,这个错误的原因是ivy下载有错误造成的,删除掉之后编译过程中会自动下载。(所以整个过程要联网)
还
会可能会出现一个问题,就是说某某类/函数已过时,这个问题虽然不会影响到最后的编译,但装到eclipse里边就会出现failed
login
error,所以如果出现这个问题就得重新编译,重新编译时要把过去配置编译的文件全部删除,否则即使重新ant出来的文件还会是错误的。
由于不知道怎么清理,所以我的做法就是把源码删掉,再次解压,重新配置,重新编译,如果有网友知道怎么做更为方便,就留个言
注:整个配置过程要在有网络的环境下进行,而且确保hadoop已经开启,如果此时还是出现failed
login
error,就请你查看hadoop-1.2.1-eclipse-plugins.jar下的lib下的jar包,如果所有的jar包后边都没有版本
号,那就会有问题,就请你重新编译,直到里边的jar包有了版本号。