Hadoop2.3.0-CDH5.1.3的eclipse插件编译

时间:2023-01-21 17:45:34

最近在使用CDH5,想找个eclipse插件用用。无奈万般百度而不得,最后发现只能自己编译。可是作为萌新从来没有编译过啊。网上找到的帖子又各不相同,只能自己摸索啦。最后为了避免遗忘,还是写个blog大致记录一下。

环境:windows,Hadoop2.3.0-CDH5.1.3,eclipse版本:kapler

1,安装Ant

      版本apache-ant-1.9.6,常规的复制进去,配PATH,很简单不再赘述。

Hadoop2.3.0-CDH5.1.3的eclipse插件编译

2,安装Maven

      版本apache-maven-3.3.9,常规的复制进去,配PATH,很简单不再赘述。

Hadoop2.3.0-CDH5.1.3的eclipse插件编译

3,安装Ivy

      版本apache-ivy-2.4.0,常规的复制进去,配PATH,然后找到ivy-2.4.0.jar,把ivy-2.4.0.jar复制到%ANT_HOME%\lib 下。然后进入IVY_HOME/src/example/hello-ivy目录,运行ant可见:

Hadoop2.3.0-CDH5.1.3的eclipse插件编译


4.下载CDH版本Hadoop源码

 地址:http://archive.cloudera.com/cdh5/cdh/5/ 

下载对应版本的tar.gz文件解压到本地。我这里是D:\hadoop-2.3.0-cdh5.1.3\hadoop-2.3.0-cdh5.1.3,并把这个目录添加到HADOOP_HOME环境变量中(不添加最后运行插件过程中会报错),PATH也加入对应的${HADOOP_HOME}\bin


5.复制jar包

需要将${HADOOP_HOME}/share/hadoop/mapreduce1下面的所有jar包拷贝到

${HADOOP_HOME}/src/hadoop-mapreduce1-project 目录下面

${HADOOP_HOME}/share/hadoop/mapreduce1/lib下面的所有内容拷贝到

${HADOOP_HOME}/src/hadoop-mapreduce1-project /lib目录下面

6.配置build.xml文件

build.xml文件在${HADOOP_HOME}/src/hadoop-mapreduce1-project/src/contrib/eclipse-plugin 目录下

  <!-- Override classpath to include Eclipse SDK jars -->
  <path id="classpath">
    <pathelement location="${build.classes}"/>
    <pathelement location="${hadoop.root}/build/classes"/>
<span style="color:#FF0000;">     <fileset dir="${hadoop.root}">
        <include name="**/*.jar" />
    </fileset></span>
    <path refid="eclipse-sdk-jars"/>
  </path>

<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}"
     optimize="${javac.optimize}"
    <span style="color:#FF0000;"> <!--修改为自己用的版本-->  </span>
     target="1.7"
     source="1.7"
     deprecation="${javac.deprecation}"
     <span style="color:#FF0000;">includeantruntime="on"</span>>
     <classpath refid="classpath"/>
    </javac>
  </target>

  <!-- Override jar target to specify manifest -->
  <target name="jar" depends="compile" unless="skip.contrib">
    <mkdir dir="${build.dir}/lib"/><!--原来的2个删掉改为copy以下5.1.3所需的18个jar包,其余版本可能略有区别-->
    <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-configuration-1.6.jar" todir="${build.dir}/lib" verbose="true"/>
    <copy file="${hadoop.root}/lib/commons-httpclient-3.1.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-lang-2.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/hadoop-common-2.3.0-cdh5.1.3.jar" todir="${build.dir}/lib" verbose="true"/>
    <copy file="${hadoop.root}/lib/hadoop-auth-2.3.0-cdh5.1.3.jar" todir="${build.dir}/lib" verbose="true"/>
    <copy file="${hadoop.root}/lib/hadoop-hdfs-2.3.0-cdh5.1.3.jar" todir="${build.dir}/lib" verbose="true"/>
    <copy file="${hadoop.root}/lib/slf4j-log4j12-1.7.5.jar" todir="${build.dir}/lib" verbose="true"/>
    <copy file="${hadoop.root}/lib/slf4j-api-1.7.5.jar" todir="${build.dir}/lib" verbose="true"/>
    <copy file="${hadoop.root}/lib/log4j-1.2.17.jar" todir="${build.dir}/lib" verbose="true"/>
    <copy file="${hadoop.root}/lib/protobuf-java-2.5.0.jar" todir="${build.dir}/lib" verbose="true"/>
    <copy file="${hadoop.root}/lib/hadoop-annotations-2.3.0-cdh5.1.3.jar" todir="${build.dir}/lib" verbose="true"/>
    <copy file="${hadoop.root}/hadoop-tools-2.3.0-mr1-cdh5.1.3.jar" todir="${build.dir}/lib" verbose="true"/>
    <copy file="${hadoop.root}/lib/guava-11.0.2.jar" todir="${build.dir}/lib" verbose="true"/>
    <copy file="${hadoop.root}/lib/commons-collections-3.2.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>


 

修改build.properties

增加如下:

eclipse.home=D:/eclipse/    <!--自己的-->
reactor.repo=https://repository.cloudera.com/content/repositories/snapshots
version=2.3.0-mr1-cdh5.1.3<span style="color:#3d3d3d;"><span style="color:#3d3d3d;"></span></span><pre name="code" class="html"> <!--自己的eclipse目录-->

 

修改META-INF下的MANIFEST.MF文件

Bundle-ClassPath: classes/,lib/hadoop-core.jar,lib/commons-cli-1.2.jar,lib/commons-configuration-1.6.jar,lib/commons-httpclient-3.1.jar,lib/jackson-core-asl-1.8.8.jar,lib/commons-lang-2.6.jar,lib/jackson-mapper-asl-1.8.8.jar,lib/hadoop-common-2.3.0-cdh5.1.3.jar,lib/hadoop-auth-2.3.0-cdh5.1.3.jar,lib/hadoop-hdfs-2.3.0-cdh5.1.3.jar,lib/slf4j-log4j12-1.7.5.jar,lib/slf4j-api-1.7.5.jar,lib/log4j-1.2.17.jar,lib/protobuf-java-2.5.0.jar,lib/hadoop-annotations-2.3.0-cdh5.1.3.jar,hadoop-tools-2.3.0-mr1-cdh5.1.3.jar,lib/guava-11.0.2.jar,lib/commons-collections-3.2.1.jar

7.修改build-contrib.xml文件

位于在上一层目录中

  <property name="javac.deprecation" value="<span style="color:#FF0000;">on</span>"/>

8.编译插件

最后进入${HADOOP_HOME}\src\hadoop-mapreduce1-project\src\contrib\eclipse-plugin执行ant即可。

执行成功后在提示的目录中可以找到jar包了,右键使用rar打开,找到plugin.xml文件在172行左右加入如下代码。添加后替代原来的plugin.xml

<extension point="org.eclipse.ui.commands">
      <command id="dfs.browser.action.delete"
         name="Delete">
      </command>
      <command id="dfs.browser.action.disconnect"
            name="Disconnect">
      </command>
      <command id="dfs.browser.action.refresh"
            name="Refresh">
      </command>
      <command id="dfs.browser.action.download"
            name="Download from DFS">
      </command>
        <command id="dfs.browser.action.upload_files"
            name="Upload files to DFS">
      </command>
      <command id="dfs.browser.action.upload_dir"
            name="Upload directory to DFS">
      </command>
        <command id="dfs.browser.action.open"
            name="view">
      </command>
       <command id="dfs.browser.action.reconnect"
            name="Reconnect">
      </command>
      <command id="dfs.browser.action.mkdir"
            name="Create new directory">
      </command>
   </extension>    


9.下载winutils.exe

很多地方都有,无需考虑版本问题,貌似都是一样的。放到${HADOOP_HOME}\bin 下。

如果找不到可以去http://www.aboutyun.com/thread-8311-1-1.html下载

10.插件的配置

Window→preference→hadoop 目录选择${HADOOP_HOME} \share\hadoop\mapreduce1而不是${HADOOP_HOME}


最后说几个常见的问题:

1,ant过程中连接失败:请挂VPN

2,插件放进去点了没反应,或者等等:请查看workplace里面的log应该有报错,通常为NoClassDefFoundError,那么就把对应的jar包加到插件的jar总,并且MF文件中作对应修改。

3 .运行项目提示 java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.:忘记配置  ${HADOOP_HOME}环境。

4 .一切都弄好了为何还是连不上?提示20000 millis timeout while waiting for channel to be ready for connect. ch :?

    请修改windows 的hosts文件 加入对应的全部主机,有的说是要开启windows的telnet,并且关闭防火墙。不管他们开没开,不过telnet我是没开的,防火墙倒是关了,一样成功。关键在于客户机作为hadoop集群的外部一个节点使用eclipse插件访问的时候使用的是自己hosts文件还不是hadoop集群的。所以必须在自己的客户机上配置hosts文件才行(原谅我忘记这句话参考自哪篇文章了,实在是看了太多帖子了)


最后附上成功截图一张,左边为插件的HDFS的文件浏览,右边是跑的测试操作HBase的例子。

Hadoop2.3.0-CDH5.1.3的eclipse插件编译

参考:http://my.oschina.net/muou/blog/408543

            http://blog.csdn.net/dwld_3090271/article/details/41546323

            http://blog.csdn.net/luckymelina/article/details/19923095

            http://blog.csdn.net/yunlong34574/article/details/21331927