編譯、測試Hadoop Eclipse plugin


編譯、測試Hadoop Eclipse plugin



平臺:

OS CentOSrelease 6.4 (Final) X64

Hadoop 1.1.3


描述:

使用ant 工具編譯 Hadoop Eclipse 插件


一、操作所需步驟:


1、安裝配置 ant

2、配置Hadoop 文件分別是:

$HADOOP_HOME/build.xml

$HADOOP_HOME/src/contrib/build-contrib.xml

$HADOOP_HOME/src/contrib/eclipse-plugin/build.xml

$HADOOP_HOME/src/contrib/eclipse-plugin/build.properties

$HADOOP_HOME/src/contrib/eclipse-plugin/META-INF/MANIFEST.MF

3、編譯執行ant compile 命令

4、eclipse中加載插件

5、測試




一、安裝ant


下載ant

http://ant.apache.org/bindownload.cgi


apache-ant-1.9.2-bin.tar.gz


解壓指定目錄

tar -zxvfapache-ant-1.9.2-bin.tar.gz -C /usr/ant/


編輯環境變量

export ANT_HOME=/usr/ant/apache-ant-1.9.2

追加 $ANT_HOME/bin PATH

exportPATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ANT_HOME/bin


測試:

[root@master~]# ant -version

Apache Ant(TM)version 1.9.2 compiled on July 8 2013

[root@master~]#


二、配置 Hadoop 編譯所需文件

1、編輯$HADOOP_HOME/build.xml


l修改31行,去掉紅色字體部分

31 <property name="version" value="1.1.3-SNAPSHOT"/>


l註銷這部分內容:

2421 <!--

2422 <targetname="ivy-download" description="To download ivy"unless="offline">

2423 <getsrc="${ivy_repo_url}" dest="${ivy.jar}"usetimestamp="true"/>

2424 </target>

2425 -->

如果不註銷會在沒編輯一步都會要下載ivy


l去掉對ivy-download的依賴關係,去掉紅色字體部分


2427 <!--

2428 To avoid Ivy leaking things across bigprojects, always load Ivy in the same classloader.

2429 Also note how we skip loading Ivy if it isalready there, just to make sure all is well.

2430 -->

2431 <target name="ivy-init-antlib"depends="ivy-download,ivy-init-dirs,ivy-probe-antlib"unless="ivy.found">

2432 <typedefuri="antlib:org.apache.ivy.ant" onerror="fail"

2433 loaderRef="ivyLoader">

2434 <classpath>



2、build-contrib.xml

文件所在目錄:

$HADOOP_HOME/src/contrib/build-contrib.xml


添加:eclipse 主目錄和hadoop版本,這裏hadoop的版本和$HADOOP_HOME/build.xml中的版本一致


<property name="eclipse.home"location="/usr/eclipse"/>

<property name="version"value="1.1.3 "/>


放在紅色字體位置,並修改修改locationhadoop主目錄


<!--Imported by contrib/*/build.xml files to share generic targets. -->


<projectname="hadoopbuildcontrib"xmlns:ivy="antlib:org.apache.ivy.ant">


<propertyname="eclipse.home" location="/usr/eclipse"/>

<property name="version"value="1.1.3"/>



注意:

這裏的"version"value版本必須與$HADOOP_HOME/build.xml中的"version" value版本一致

如果不一致在編譯時會報如下錯:

[hadoop@masterhadoop]$ ant compile

Buildfile:/usr/hadoop/build.xml


BUILD FAILED

Target"ivy-probe-antlib" does not exist in the project "Hadoop".It is used from target "ivy-init-antlib".


3、編輯文件build.xml


文件位置:


$HADOOP_HOME/src/contrib/eclipse-plugin/


插入紅色字體部分內容


<!--Override jar target to specify manifest -->

<targetname="jar" depends="compile"unless="skip.contrib">

<mkdirdir="${build.dir}/lib"/>

<copyfile="${hadoop.root}/build/hadoop-core-${version}.jar"tofile="${build.dir}/lib/hadoop-core.jar"verbose="true"/>

<copyfile="${hadoop.root}/build/ivy/lib/Hadoop/common/commons-cli-${commons-cli.version}.jar" todir="${build.dir}/lib"verbose="true"/>

<copy file="${hadoop.root}/lib/commons-configuration-1.6.jar"tofile="${build.dir}/lib/commons-configuration-1.6.jar"verbose="true"/>

<copyfile="${hadoop.root}/lib/commons-httpclient-3.0.1.jar"tofile="${build.dir}/lib/commons-httpclient-3.0.1.jar"verbose="true"/>

<copy file="${hadoop.root}/lib/commons-lang-2.4.jar"tofile="${build.dir}/lib/commons-lang-2.4.jar"verbose="true"/>

<copy file="${hadoop.root}/lib/jackson-core-asl-1.8.8.jar"tofile="${build.dir}/lib/jackson-core-asl-1.8.8.jar"verbose="true"/>

<copyfile="${hadoop.root}/lib/jackson-mapper-asl-1.8.8.jar"tofile="${build.dir}/lib/jackson-mapper-asl-1.8.8.jar"verbose="true"/>

<jar

jarfile="${build.dir}/hadoop-${name}-${version}.jar"

manifest="${root}/META-INF/MANIFEST.MF">

<fileset dir="${build.dir}"includes="classes/ lib/"/>

<filesetdir="${root}" includes="resources/ plugin.xml"/>

</jar>

</

這裏需要注意的是 copyfile 之間是有空格的,如果沒有空間編譯時候會失敗。


4、編輯build.properties


文件所在位置:


$HADOOP_HOME/src/contrib/eclipse-plugin/


插入紅色字體部分

[hadoop@master eclipse-plugin]$ catbuild.properties|less

output.. = bin/

bin.includes = META-INF/,\

plugin.xml,\

resources/,\

classes/,\

classes/,\

lib/


eclipse.home=/usr/eclipse


這裏是eclipse.homeeclipse的安裝目錄爲$eclipse_home


5、編輯MANIFEST.MF


文件位置:


$HADOOP_HOME/src/contrib/eclipse-plugin/META-INF.MF

[hadoop@master META-INF]$ vi MANIFEST.MF

Manifest-Version: 1.0

Bundle-ManifestVersion: 2

Bundle-Name: MapReduce Tools for Eclipse

Bundle-SymbolicName:org.apache.hadoop.eclipse;singleton:=true

Bundle-Version: 0.18

Bundle-Activator: org.apache.hadoop.eclipse.Activator

Bundle-Localization: plugin

Require-Bundle: org.eclipse.ui,

org.eclipse.core.runtime,

org.eclipse.jdt.launching,

org.eclipse.debug.core,

org.eclipse.jdt,

org.eclipse.jdt.core,

org.eclipse.core.resources,

org.eclipse.ui.ide,

org.eclipse.jdt.ui,

org.eclipse.debug.ui,

org.eclipse.jdt.debug.ui,

org.eclipse.core.expressions,

org.eclipse.ui.cheatsheets,

org.eclipse.ui.console,

org.eclipse.ui.navigator,

org.eclipse.core.filesystem,

org.apache.commons.logging

Eclipse-LazyStart: true

Bundle-ClassPath: classes/,lib/hadoop-core.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.8.8.jar,lib/jackson-mapper-asl-1.8.8.jar,lib/commons-cli-1.2.jar

Bundle-Vendor: Apache Hadoop

[hadoop@master META-INF]$


這裏需要注意的是格式和英文字符“,”號;這裏格式lib文件之間沒有空格和回車符,如果格式不對雖然編譯可以通過,但在eclipse中加載插件後創建NewHadoop Location 時沒有反應。這個問題導致我花費了兩天時間。


三、編譯目錄,生成插件


1、進入hadoop根目錄中編譯


[hadoop@master ~]$ cd $HADOOP_HOME

[hadoop@master hadoop]$


運行ant 編譯hadoop


[hadoop@master hadoop]$ ant

Buildfile: /usr/hadoop/build.xml


clover.setup:


clover.info:

[echo]

[echo] Clover not found. Codecoverage reports disabled.

[echo]


clover:


ivy-init-dirs:


ivy-probe-antlib:


ivy-init-antlib:


ivy-init:

[ivy:configure] :: Ivy 2.1.0 - 20090925235825:: http://ant.apache.org/ivy/ ::

[ivy:configure] :: loading settings :: file =/usr/hadoop/ivy/ivysettings.xml


ivy-resolve-common:

[ivy:resolve] :: resolving dependencies ::org.apache.hadoop#Hadoop;working@master

[ivy:resolve] confs: [common]

[ivy:resolve] found commons-logging#commons-logging;1.0.4in maven2

[ivy:resolve] found log4j#log4j;1.2.15 in maven2

[ivy:resolve] foundcommons-httpclient#commons-httpclient;3.0.1 in maven2

[ivy:resolve] found commons-codec#commons-codec;1.4 inmaven2

[ivy:resolve] found commons-cli#commons-cli;1.2 in maven2

[ivy:resolve] found commons-io#commons-io;2.1 in maven2


………………


compile:


BUILD SUCCESSFUL

Total time: 1 minute 38 seconds

[hadoop@master hadoop]$


在編譯過程中會有警告,這不影響。編譯完成會在$HADOOP_HOME目錄中多處一個build文件夾


2、進入$HADOOP_HOME/src/contrib/eclipse-plugin/目錄


運行antjar 命令


說明:這一步是生成eclipse所需hadoop插件包


[hadoop@master eclipse-plugin]$ ant jar

Buildfile:/usr/hadoop/src/contrib/eclipse-plugin/build.xml


check-contrib:


init:

[echo] contrib: eclipse-plugin


init-contrib:



………………

[copy] Copying /usr/hadoop/lib/jackson-mapper-asl-1.8.8.jar to/usr/hadoop/build/contrib/eclipse-plugin/lib/jackson-mapper-asl-1.8.8.jar

[jar] Building jar: /usr/hadoop/build/contrib/eclipse-plugin/hadoop-eclipse-plugin-1.1.3.jar


BUILD SUCCESSFUL

Total time: 10 seconds


編譯成功後會在紅色字體部分顯示插件所在目錄位置。


在這一步可以查看到如下信息:


[hadoop@master eclipse-plugin]$ hadoopversion

Hadoop 1.1.3

Subversion -r

Compiled by hadoop on Thu Oct 31 13:36:59 CST2013

From source with checksumc720ddcf4b926991de7467d253a79b8b

[hadoop@master eclipse-plugin]$


Hadoop的版本和編譯日期。


四、配置eclipse


1、把編譯成功後的插件拷貝到eclipse插件目錄中。

cp$HADOOP_HOME/build/contrib/eclipse-plugin/hadoop-eclipse-plugin-1.1.3.jar/usr/eclipse/plugins/


2、打開eclipse或者重新打開eclipse配置hadoop installation directory


打開Window-->Preferens,你會發現HadoopMap/Reduce選項,在這個選項裏你需要配置Hadoopinstallation directory。這裏的目錄爲hadoop的主目錄:$HADOOP_HOME;配置完成後退出。

171856105.png



3、打開Map/Reduce視圖,配置Map/ReduceLocations

Window->Open Perspective->Other ,彈出對話框列表中,會出現圖標爲藍色大象,文字爲Map/Reduce點擊0K


171950537.png

Eclipse 下方會出現Map/ReduceLocation ,在空白區域點擊鼠標右鍵出現新建“NewHadoop location


172021620.png


彈出編輯框,輸入Map/ReduceMasterDFSMaster 參數,即爲配置hadoop$HADOOP_HOME/conf 目錄中core-site.xmlmapred-site.xml文件參數。


[hadoop@master conf]$ cat core-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl"href="configuration.xsl"?>


<!-- Put site-specific property overridesin this file. -->


<configuration>


<property>


<name>hadoop.tmp.dir</name>


<value>/usr/hadoop/tmp</value>


<description>A base for other temporary directories.</description>


</property>


<!-- file system properties -->


<property>


<name>fs.default.name</name>


<value>hdfs://192.168.10.243:9000</value>


</property>


</configuration>




[hadoop@master conf]$ cat mapred-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl"href="configuration.xsl"?>


<!-- Put site-specific property overridesin this file. -->


<configuration>


<property>


<name>mapred.job.tracker</name>


<value>http://192.168.10.243:9001</value>


</property>


</configuration>

[hadoop@master conf]$


172138689.png



配置完成後會出現如下信息:


172220533.png


五、測試配置插件是否在eclipse中成功


使用wordcount.java來測試


1、測試準備


建文件夾input,並穿件兩個文件test1.txttest2.txt


test1.txt 中存入數據內容:

hello word


test2.txt 中存入數據內容:

hello hadoop


將文件夾input複製到hdfsin目錄

Hadoop dfs -put /home/hadoop/input in


查看in目錄:


[hadoop@master ~]$ hadoop dfs -ls ./in/*

-rw-r--r-- 3 hadoop supergroup 112013-10-31 14:39 /user/hadoop/in/test1.txt

-rw-r--r-- 3 hadoop supergroup 132013-10-31 14:39 /user/hadoop/in/test2.txt


2、創建項目


File-->New-->Other-->Map/ReduceProject,項目名稱爲test(可以隨便自行命名),

複製WordCount.java到新建項test中的src目錄中。

cp $HADOOP_HOME/src/examples/org/apache/hadoop/examples/WordCount.java

/home/hadoop/workspace/test/src


3、編譯運行WordCount


點擊WordCount.java右鍵—>Run as -->配置Java Application àWordCount(1)-àArguments à輸入:

hdfs://192.168.10.243:9000/user/hadoop/in hdfs://192.168.10.243:9000/user/hadoop/out

--àapply àrun

172316296.png


注意:hdfs://192.168.10.243:9000/user/hadoop/out outWordCount輸出結果存放的目錄。


查看結果:

方法一:

運行成功後可以查看DFSLocations hadoop目錄中會多處一個out目錄,並有兩個文件part-開頭的是存放WordCount的結果。點擊可以到結果:


172353236.png

方法二:

使用hadoop命令:hadoopdfs –cat ./out/*


輸入結果:

[hadoop@master~]$ hadoop dfs -cat ./out/*

hadoop 1

hello 2

word 1

[hadoop@master~]$


到這裏hadoopeclipse開會工具已經安裝成功。



在此過程中遇到了各類問題:


比如:

1、hadoopbuild-contrib.xml 467或者其他編碼這個都是配置文件的問題,注意修改時的空格,其他字符等

2、點擊右鍵沒有出現NewHadoop Location 是因爲MANIFEST.MF jar文件的格式等問題。

3、以及編譯失敗時都會顯示BUILDFAILED 下面緊接着會說明失敗原因,根據不同原因解決問題等;

4、hadoop 編譯後版本不同一,如:我eclipse安裝在master節點上,這樣會出現重啓之後datanode節點都沒有啓動起來,這裏需要把編譯後的版本複製到各個節點上,然後在重新hadoop dfsadmin -format,但這樣會丟掉數據。在這裏我都是測試所以數據不中要。或者在各個節點上運行 hadoop datanode -upgrade 。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章