在安装hadoop eclipse插件的时候,一般都是直接将HADOOP_HOME/lib中的 hadoop-eclipse-plugin-{version}.jar 复制到eclipse安装目录下的plugins目录中。但Hadoop-1.0.0生成的jar包不能直接使用,如果直接复制到eclipse的插件目录中,在连接DFS时会出现错误,提示信息为: "error: failure to login"。
这个问题产生的原因是直接编译生成的jar包中缺少一些依赖的jar文件,解决这个问题需要我们修改部分配置文件并重新使用ant编译eclipse-plugin。涉及到的代码及配置文件位于Hadoop安装目录的src/contrib/eclipse-plugin。具体步骤如下:
1.修改${hadoop.root}/src/contrib目录的build-contrib.xml文件,添加eclipse路径和hadoop版本信息:
<property name="eclipse.home" location="这里填eclipse安装目录,如:/home/zlx/eclipse" />
<property name="version" value="这里填hadoop版本号,如:1.0.0"/>
这一步也可以用在ant命令中添加参数来代替: ant -Declipse.home=/home/zlx/eclipse -Dversion=1.0.0
2.修改${hadoop.root}/src/contrib/eclipse-plugin目录下的build.xml文件,在id为classpath的path节点添加hadoop-core的jar依赖
<!-- Override classpath to include Eclipse SDK jars --> <path id="classpath"> <pathelement location="${build.classes}"/> <pathelement location="${hadoop.root}/build/classes"/> <!--hadoop-core --> <pathelement location="${hadoop.root}/hadoop-core-1.1.2.jar"/> <path refid="eclipse-sdk-jars"/> </path>
找到name为jar的target,将相应的jar文件打包进插件的lib目录:
<!-- 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-${commons-cli.version}.jar" todir="${build.dir}/lib" verbose="true"/> <!-- 将以下jar包打进hadoop-eclipse-1.0.0.jar中 --> <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.0.1.jar" todir="${build.dir}/lib" verbose="true"/> <copy file="${hadoop.root}/lib/jackson-core-asl-1.0.1.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>
3.修改MANIFEST.MF文件里面Bundle-ClassPath属性值
Bundle-ClassPath: classes/,lib/hadoop-core.jar,lib/commons-cli-1.2.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.0.0.jar,lib/jackson-mapper-asl-1.0.0.jar在命令行进入 ${hadoop.root}/src/contrib/eclipse-plugin目录,输入: ant jar
最后在${hadoop.root}/build/contrib/eclipse-plugin目录生成打包好的插件,将hadoop-eclipse-plugin-1.0.0.jar文件复制到eclipse的plugins目录即可。