阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop2.4.0 Eclipse插件制作

173次阅读
没有评论

共计 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

    ————————————– 分割线 ————————————–

———————————————— 最终的 build.xml 文件,修改的地方有注释 —————————————————————

<?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

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计8673字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中