共计 8673 个字符,预计需要花费 22 分钟才能阅读完成。
跌跌撞撞两天装 Hadoop2.4.0 的环境,今天终于可以尝试写点程序了,想了一想,不得其法,但有一点是肯定的,那就是需要用 eclipse,查了一上午的资料,怎么讲的都有,最后锁定了这个帖子,hadoop2x-eclipse-plugin。想用 Github 下载,但是最后下载失败,页面右侧有个 Download ZIP,用这个下载成功。下边来说说我的整个制作过程吧:
- 想导入到 eclipse 中制作,但是导入进去之后觉得麻烦就算了,直接在 win7 64 位、JDK1.6、ANT1.8 的环境下以命令行运行
- 依葫芦画瓢,设置 eclipse 的目录和 hadoop 的目录,在没有修改任何文件的情况下直接运行
D:\SDK\hadoop2x-eclipse-plugin-master\src\contrib\eclipse-plugin>ant jar -Dversion=2.4.0 -Declipse.home=D:\WorkTools\MyEclipse10\Common -Dhadoop.home=D:\SDK\hadoop-2.4.0
- 在 ivy-resolve-common 处卡了大概 138 分钟,最后 build 失败,查看原因有两个,一个是找不到 4 个依赖包,一个是找不到 1 个核心包
- 依赖包分别是这些,可能是换路径了吧:
https://oss.sonatype.org/content/groups/public/com/google/google/1/google-1.jar
https://oss.sonatype.org/content/groups/public/net/java/jvnet-parent/1/jvnet-parent-1.jar
https://oss.sonatype.org/content/groups/public/com/sun/jersey/contribs/jersey-contribs/1.9/jersey-contribs-1.9.jar
https://oss.sonatype.org/content/groups/public/org/eclipse/jetty/jetty-parent/14/jetty-parent-14.jar
- 核心包是 commons-lang-2.5.jar
- 想了一下,觉得那四个依赖包似乎没什么用,便想跳过那个步骤,想直接进行编译插件的步骤,便修改了“hadoop2x-eclipse-plugin-master\src\contrib\eclipse-plugin\build.xml”文件
<target name=”compile” depends=”init, ivy-retrieve-common” unless=”skip.contrib”> 去掉 depends
- 核心包去 hadoop2.4 目录找,发现 hadoop2.4 用的 commons-lang-2.6.jar,便在 build.xml 中找到相应位置改为 2.6,这个需要说的是作者可能偷懒,在拷贝文件中使用的是变量,在配置信息中直接使用了 2.5,不统一,变量配置信息在“hadoop2x-eclipse-plugin-master\ivy\libraries.properties”文件中,搜索“commons-lang.version”将对应的版本改为 2.6,好了,在命令行下运行 ant,成功在“hadoop2x-eclipse-plugin-master\build\contrib\eclipse-plugin”下生成插件
- 兴奋的拿着插件跟 myeclipse10 里试,失败(插件压根不出现),跟 eclipse3.7 里试,失败(插件能出现,但是无法正常使用,新增不了 location)
- 拿着现成的 2.2 的插件均可以正常使用
- 后来经过排查原因 myeclipse10 里是因为插件放的位置不对,不能直接放到 plugin 里;eclipse3.7 里失败是因为插件还缺少包
- 如何排查的呢?看 eclipse 的启动日志,这个日志在 workplace 中的.metadata 文件下的.log 文件,在 eclipse3.7 里报的错误是无法初始化 hadoop,很郁闷,没太大帮助,于是就上 eclilpse 的官网下载了最新版的 eclipse4.3.2,将 ant 语句改为
D:\SDK\hadoop2x-eclipse-plugin-master\src\contrib\eclipse-plugin>ant jar -Dversion=2.4.0 -Declipse.home=D:\WorkTools\eclipse4.3.2 -Dhadoop.home=D:\SDK\hadoop-2.4.0
对,改为以 eclipse4.3.2 为 eclipse 目录 (这个配置主要就是为生成 eclipse 插件提供 jar 包支持),生成插件后放到 eclipse4.3.2 的 plugins 里,启动 eclipse 并观察日志,抛出异常
java.lang.NoClassDefFoundError: org/apache/commons/collections/map/UnmodifiableMap
- yes~ 折腾了又两个多小时,终于让我抓住了,找到这个包,在 build.xml 中添加上,别忘了在配置信息中也要添加,就是文件最下边的 attribute,如果想以后方便,版本号也可以通过变量形式在 libraries.properties 中维护,搞定后,重新运行 ant
- 终于行了,在 myeclipse10 下也可正常使用了(这么建立文件夹 MyEclipse 10\dropins\hadoop\eclipse\plugins,把插件扔这个文件夹下边就行了)
————————————– 分割线 ————————————–
相关阅读 :
Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm
Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm
Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm
Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm
单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm
Hadoop LZO 安装教程 http://www.linuxidc.com/Linux/2013-01/78397.htm
Hadoop 集群上使用 Lzo 压缩 http://www.linuxidc.com/Linux/2012-05/60554.htm
————————————– 分割线 ————————————–
<?xml version=”1.0″ encoding=”UTF-8″ standalone=”no”?>
<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>
<path id=”hadoop-sdk-jars”>
<fileset dir=”${hadoop.home}/share/hadoop/mapreduce”>
<include name=”hadoop*.jar”/>
</fileset>
<fileset dir=”${hadoop.home}/share/hadoop/hdfs”>
<include name=”hadoop*.jar”/>
</fileset>
<fileset dir=”${hadoop.home}/share/hadoop/common”>
<include name=”hadoop*.jar”/>
</fileset>
</path>
<path id=”classpath”>
<pathelement location=”${build.classes}”/>
<path refid=”eclipse-sdk-jars”/>
<path refid=”hadoop-sdk-jars”/>
</path>
<target name=”check-contrib” unless=”eclipse.home”>
<property name=”skip.contrib” value=”yes”/>
<echo message=”eclipse.home unset: skipping eclipse plugin”/>
</target>
<!– 这里我最后删除了 depends=”init, ivy-retrieve-common” –>
<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>
<target name=”jar” depends=”compile” unless=”skip.contrib”>
<mkdir dir=”${build.dir}/lib”/>
<copy todir=”${build.dir}/lib/” verbose=”true”>
<fileset dir=”${hadoop.home}/share/hadoop/mapreduce”>
<include name=”hadoop*.jar”/>
</fileset>
</copy>
<copy todir=”${build.dir}/lib/” verbose=”true”>
<fileset dir=”${hadoop.home}/share/hadoop/common”>
<include name=”hadoop*.jar”/>
</fileset>
</copy>
<copy todir=”${build.dir}/lib/” verbose=”true”>
<fileset dir=”${hadoop.home}/share/hadoop/hdfs”>
<include name=”hadoop*.jar”/>
</fileset>
</copy>
<copy todir=”${build.dir}/lib/” verbose=”true”>
<fileset dir=”${hadoop.home}/share/hadoop/yarn”>
<include name=”hadoop*.jar”/>
</fileset>
</copy>
<copy todir=”${build.dir}/classes” verbose=”true”>
<fileset dir=”${root}/src/java”>
<include name=”*.xml”/>
</fileset>
</copy>
<copy file=”${hadoop.home}/share/hadoop/common/lib/protobuf-java-${protobuf.version}.jar” todir=”${build.dir}/lib” verbose=”true”/>
<copy file=”${hadoop.home}/share/hadoop/common/lib/log4j-${log4j.version}.jar” todir=”${build.dir}/lib” verbose=”true”/>
<copy file=”${hadoop.home}/share/hadoop/common/lib/commons-cli-${commons-cli.version}.jar” todir=”${build.dir}/lib” verbose=”true”/>
<copy file=”${hadoop.home}/share/hadoop/common/lib/commons-configuration-${commons-configuration.version}.jar” todir=”${build.dir}/lib” verbose=”true”/>
<copy file=”${hadoop.home}/share/hadoop/common/lib/commons-lang-${commons-lang.version}.jar” todir=”${build.dir}/lib” verbose=”true”/>
<!– 下边这行是新增的,原来没有 –>
<copy file=”${hadoop.home}/share/hadoop/common/lib/commons-collections-${commons-collections.version}.jar” todir=”${build.dir}/lib” verbose=”true”/>
<copy file=”${hadoop.home}/share/hadoop/common/lib/jackson-core-asl-${jackson.version}.jar” todir=”${build.dir}/lib” verbose=”true”/>
<copy file=”${hadoop.home}/share/hadoop/common/lib/jackson-mapper-asl-${jackson.version}.jar” todir=”${build.dir}/lib” verbose=”true”/>
<copy file=”${hadoop.home}/share/hadoop/common/lib/slf4j-log4j12-${slf4j-log4j12.version}.jar” todir=”${build.dir}/lib” verbose=”true”/>
<copy file=”${hadoop.home}/share/hadoop/common/lib/slf4j-api-${slf4j-api.version}.jar” todir=”${build.dir}/lib” verbose=”true”/>
<copy file=”${hadoop.home}/share/hadoop/common/lib/guava-${guava.version}.jar” todir=”${build.dir}/lib” verbose=”true”/>
<copy file=”${hadoop.home}/share/hadoop/common/lib/hadoop-auth-${hadoop.version}.jar” todir=”${build.dir}/lib” verbose=”true”/>
<copy file=”${hadoop.home}/share/hadoop/common/lib/commons-cli-${commons-cli.version}.jar” todir=”${build.dir}/lib” verbose=”true”/>
<copy file=”${hadoop.home}/share/hadoop/common/lib/netty-${netty.version}.jar” todir=”${build.dir}/lib” verbose=”true”/>
<jar
jarfile=”${build.dir}/hadoop-${name}-${version}.jar”
manifest=”${root}/META-INF/MANIFEST.MF”>
<manifest>
<attribute name=”Bundle-ClassPath”
value=”classes/,
lib/hadoop-mapreduce-client-core-${hadoop.version}.jar,
lib/hadoop-mapreduce-client-common-${hadoop.version}.jar,
lib/hadoop-mapreduce-client-jobclient-${hadoop.version}.jar,
lib/hadoop-auth-${hadoop.version}.jar,
lib/hadoop-common-${hadoop.version}.jar,
lib/hadoop-hdfs-${hadoop.version}.jar,
lib/protobuf-java-${protobuf.version}.jar,
lib/log4j-${log4j.version}.jar,
lib/commons-cli-1.2.jar,
lib/commons-configuration-1.6.jar,
lib/commons-httpclient-3.1.jar,
<!– 下边这行原来写的是 commons-lang-2.5 –>
lib/commons-lang-${commons-lang.version}.jar,
<!– 下边这行是新增的,原来没有 –>
lib/commons-collections-${commons-collections.version}.jar,
lib/jackson-core-asl-1.8.8.jar,
lib/jackson-mapper-asl-1.8.8.jar,
lib/slf4j-log4j12-1.7.5.jar,
lib/slf4j-api-1.7.5.jar,
lib/guava-${guava.version}.jar,
lib/netty-${netty.version}.jar”/>
</manifest>
<fileset dir=”${build.dir}” includes=”classes/ lib/”/>
<fileset dir=”${root}” includes=”resources/ plugin.xml”/>
</jar>
</target>
</project>
更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13