基於centos 6.2的eclipse-plugin插件各版本編譯方法

 

.最近搗鼓cdh雲存儲,因爲與eclipse端不兼容,各類神奇,把cdh4降成cdh3u5,而後又降成cdh3u4,總之很煩,後來看到了篇文章關於如何本身編譯eclipse plugin的jar包,而後本身修改修改,在這裏跟你們分享分享java

 

首先,不管你的服務器上Hadoop 使用的是什麼版本,你都須要下載對應的這個版本的源代碼包進行編譯你是Apache Hadoop 0.20.2 就去Apache 0.20.2 的,你是Apache 0.21 版本的就去下0.21 版本的你是Cloudera CHDu.x 版本的,就去Cloudera 網站上下它的CDHu.x  版本對應的tar 確保你要鏈接的服務器版本和你打算編譯的eclipse-plugin版本是一致的. linux

在本身編譯eclipse-plugin以前,你須要apache-ant, apache-maven, apache-ivy若是你打算編譯整個包括hadoop的服務器版本並生成二進制包,你還須要apache-forrest 用來輸出文檔. ant,maven,forrest 的安裝跟java 的安裝沒有區別,解壓,而後添加對應的bin目錄到path 變量. ivy 的安裝就是添加一個apache-ivy-xxx.jar 到你的ant  安裝目錄下的lib 目錄這些前提工具就算安裝好了. apache

而後從命令行進入你解壓的$hadoop_home (cdh4的源碼包中的目錄爲/root/hadoop-2.0.0-cdh4.1.1/src/hadoop-mapreduce-project源代碼目錄執行ant compile-core , 這個會編譯基礎的hadoop-core 注意若是你是在linux 下這個命令不會報錯,可是若是你是windows 會報can’t run  program mvn , 在對應的build.xml 文件的42 行,你須要進入$Hadoop_home/build.xml 文件的42行,修改vim

         <exec  executable="mvn"  xxxxxxxxxxxxxxxxxxxxx windows

改爲 <exec  executable="mvn.bat"  xxxxxxxxxxxxxxxxxx 服務器

若是你打算編譯整個包的話對應的1230  行裏面的forrest windows 下一樣會出現這個錯誤. app

 

而後你須要將$Hadoop_home 下面的hadoop-core-xxx.jar 文件拷貝到$Hadoop_home/build 目錄下你是什麼版本的就拷貝對應版本的hadoop-core-xxx.jar 文件好比我編譯的是hadoop-core-0.20.2-cdh3u4.jar 文件. eclipse

進入$Hadoop_home/src/contrib/eclipse-plugin 目錄執行 maven

ant –Declipse.home=/path/to/eclipse  -Dversion=0.20.2-cdh3u4 jar ide

注意,若是你沒有執行前面一步的copy 工做,你會報錯找不到build/hadoop-core-xxx.jar 文件你也能夠修改對應eclipse-plugin 目錄下的build.xml 文件的69行左右對應的兩個copy 任務.

<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 的這些文件可以在對應的目錄找到若是你是0.21 版本的apache-hadoop ,因爲0.21 版本徹底maven 化了你可能須要添加hadoop-core-xxx , hadoop-mapreduce-xxx.jar hadoop-hdfs-xxx.jar , 個人是CDHu4 的,你在執行完這個以後在$hadoop_home/build/contrib/eclipse-plugin 下面會有一個hadoop-eclipse-plugin-0.20.2-cdh3u4.jar 的文件不過這個文件是不能用的,會提示你差一些jar 文件你須要添加 jackson-core-asl-xxx.jar , jackson-mapper-asl-xxx.jar , commons-httpclient-xxx.jar 文件具體的version 你須要到$hadoop_home/lib 目錄下本身找. apache-hadoop 0.20.205 版本的好像用的是jackson-core-1.0.1版本的. CDHu4 版本用的好像是jackson-core-1.5.2 版本的.

<copy file="${hadoop.root}/lib/jackson-core-asl-1.5.2.jar" todir="${build.dir}/lib" verbose="true"/>
  <copy file="${hadoop.root}/lib/jackson-mapper-asl-1.5.2.jar" todir="${build.dir}/lib" verbose="true"/>
  <copy file="${hadoop.root}/lib/commons-httpclient-3.1.jar" todir="${build.dir}/lib" verbose="true"/>

 

編譯好以後放在eclipse dropin 目錄下就能夠了.

注意鏈接的時候MapReduce-Master port  別和DFS port 填反了,否則會報fail to open /xxxx 的錯誤默認安裝的時候應該是mapreduce 8021 , dfs  8020 , 查看你對應服務器上的端口配置

 

 

若是出現這樣的問題

(1)/src/contrib/eclipse-plugin/build.xml:62: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds,則是ant版本有點高,1.8以上須要設置一下includeantruntime

具體設置

<javac.....includeantruntime=false>在其中加上這一項便可

(2)/root/hadoop-2.0.0-cdh4.1.1/src/hadoop-mapreduce-project/src/contrib/eclipse-plugin/bu exist出現這個問題,須要到這個目錄下SRC_BASE_DIR/hadoop-common/hadoop-mapreduce-project

執行命令mvn -DskipTests install便可

(3).編譯心得,開始的時候不會整,按照網上介紹的開始弄,老是會有這樣那樣的奇葩的問題,最近總結了一些,跟你們分享下,每次遇到錯誤的時候,第一反應就是百度,谷歌,其實咱們本身能夠根據錯誤提示,像編譯cdh4的時候遇到這個錯誤

  
  
  
  
  1. /root/hadoop-2.0.0-cdh4.1.1/src/hadoop-mapreduce-project/src/contrib/eclipse-plugin/build.xml:72: /root/hadoop-2.0.0-cdh4.1.1/src/hadoop-mapreduce-project/build/ivy/lib/Hadoop/common does not exist. 

  
  
  
  
  1. vim /root/hadoop-2.0.0-cdh4.1.1/src/hadoop-mapreduce-project/src/contrib/eclipse-plugin/build.xml 

看看它的第72行是什麼,雖然裏面語言看不太懂,但也大體能夠理解,

  
  
  
  
  1. <copy tofile="${build.dir}/lib/hadoop-common.jar"> 
  2.       <fileset dir="${hadoop.root}/build/ivy/lib/Hadoop/common" includes="hadoop-common-*.jar" excludes="hadoop-common-*tests.jar"/> 
  3.     </copy> 

能夠看出是將${hadoop.root}/build/ivy/lib/Hadoop/common目錄下的hadoop-common-*.jar包(除了hadoop-common-*tests.jar)包拷貝到

 

${build.dir}/lib/hadoop-common.jar

 

這就能大體理解了,去找${hadoop.root}/build/ivy/lib/Hadoop/common目錄,發現沒有這個目錄,因而建立這個目錄

 

而後問題又來了,緊接着報了這個錯/root/hadoop-2.0.0-cdh4.1.1/src/hadoop-mapreduce-project/src/contrib/eclipse-plugin/build.xml:72: Cannot perform operation from directory to file

當時就恍然大悟,剛建立的那個目錄裏面沒有hadoop-commons這個包,而後find 命令,找到這個包hadoop-common-2.0.0-cdh4.1.1.jar,放進去

而後就成功了,其實都很簡單,只是咱們不注意,這些錯誤,若是直接百度,谷歌的話,還真是收穫不多

相關文章
相關標籤/搜索