轉載請注明原作者:http://www.cnblogs.com/beanmoon
最近在研究大數據的課題,不可避免要用到hadoop,於是開始看《hadoop: the definite guide 2》,在遇到分析天氣數據時,遇到一個實例,然后就動手試試運行命令
% export HADOOP_CLASSPATH=build/classes
% hadoop MaxTemperature input/ncdc/sample.txt output
HADOOP_CLASSPATH是用來指明經編譯過的class文件所在的位置(我是通過eclipse來編譯的,不知道書中作者是怎么編譯的,直接用javac會報很多出錯信息,當然是因為沒有加額外的jar包的緣故,這個問題待解~~^_^),如果你沒有指明HADOOP_CLASSPATH,即使在當前文件夾下執行Hadoop命令,他仍然報錯:Could not find or load main class MaxTemperature,還可以通過"jar cmf manifest MaxTemperature.jar *.class"命令來生成一個jar包,然后通過"hadoop jar MaxTemperature.jar input output"命令來運行jar包(這時候不指明HADOOP_CLASSPATH也沒事),如果打包的時候沒有通過manifest文件指明main-class,那么還要在執行的時候加上主類的聲明:“hadoop jar MaxTemperature.jar MaxTemperature input output”。manifest文件的內容見下面:
Manifest-Version: 1.0Main-Class: MaxTemperature
如果使用eclipse,那就需要先安裝eclipse,在debian下第一次是通過aptitude install eclipse來安裝的(安裝的位置在/usr/lib/eclipse),安裝的版本是galileo版的,嫌它太舊,就自己下了一個juno版的,安裝過程如下:
(1)把eclipse-java-juno-SR2-linux-gtk.tar.gz解壓到某個目錄中,我解壓到的是主目錄,得到eclipse目錄
(2)在/usr/bin目錄下創建一個啟動腳本eclipse,執行下面的命令來創建:
sudo gedit /usr/bin/eclipse
然后在該文件中添加以下內容:
#!/bin/sh
export MOZILLA_FIVE_HOME="/usr/lib/mozilla/"
export ECLIPSE_HOME="/home/wangxing/Development/eclipse"
$ECLIPSE_HOME/eclipse $*($*什么東東??)
(3)修改該腳本的權限,讓它變成可執行,執行下面的命令:
sudo chmod a+x /usr/bin/eclipse
(4)在Applications(應用程序)菜單上添加一個圖標
sudo gedit /usr/share/applications/eclipse.desktop
然后在文件中添加下列內容:
[Desktop Entry]
Encoding=UTF-8
Name=Eclipse Platform
Comment=Eclipse IDE
Exec=eclipse
Icon=/home/bean/eclipse/icon.xpm
Terminal=false
StartupNotify=true
Type=Application
Categories=Application;Development;
通過終端啟動eclipse挺好的,可通過鼠標就不行,報如下錯:
A Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. No java virtual machine was found after searching the following locations:…網上搜了一下,解決辦法如下:
在終端進入你的eclipse目錄,然后輸入:
mkdir jre
cd jre
ln -s 你的JDK目錄/bin bin
現在開始把hadoop集成到eclipse中去,網上找到的方法如下:
http://blog.sina.com.cn/s/blog_62186b4601012acs.html
這是網上的解決辦法,可具體到我這里執行的時候又遇到了問題,首先我的hadoop是1.0.4最新版的,它不直接給你hadoop-eclipse-plugin-1.0.4.jar,它需要你自己具體導出,網上方法如下:
1、在Eclipse中選擇File-->Import-->Existing Projects into Workspace導入已有項目,假設路徑為:
/download/hadoop-1.0.1/src/contrib/eclipse-plugin,默認的項目名稱是MapReduceTools
2、默認項目名稱為MapReduceTools,然后在項目MapReduceTools中新建lib目錄,並把hadoop的hadoop-core、commons-cli-1.2.jar、commons-lang-2.4.jar、commons-configuration-1.6.jar、jackson-mapper-asl-1.8.8.jar、jackson-core-asl-1.8.8.jar、commons-httpclient-3.0.1.jar拷貝到該目錄。
3、修改../build-contrib.xml (這是存放在項目所在位置的上一層嗎??)
<property name="version" value="1.0.1"/>
<property name="hadoop.root" location="/download/develop/hadoop-1.0.1"/>
<property name="eclipse.home" location="/download/eclipse" />
4、修改build.xml
<target name="jar" depends="compile" unless="skip.contrib">
<mkdir dir="${build.dir}/lib"/>
<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-lang-2.4.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/jackson-mapper-asl-1.8.8.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-httpclient-3.0.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>
5、右鍵選擇項目-->Export,類型選擇JAR file,把plugin.xml文件、classes目錄、lib目錄和resources目錄選上,選擇導出的jar目錄,即可導出hadoop-eclipse-plugin-1.0.0.jar文件
6、把該文件放到eclipse/plugin目錄下面,重啟eclipse
最后一步步的終於導出來了jar包(由於浮躁沒有好好看上面的過程,中間遇到很多錯誤而無法導出jar包,浪費了很多時間),可始終無法讓在windows->preference中讓eclipse識別出hadoop map/reduce,應該還是我的jar包導出有問題吧,於是到網上下載了一個這樣的jar包,終於如願以償(期間我還想過使用其他的早期的hadoop版本,因為他們內置的又hadoop-eclipse-plugin-***.jar,我下的是hadoop-0.22.0版本,不過其中的很多類和接口由於不安全的原因都deprecated了,只得重新使用hadoop-1.0.4)。
其次,在配置hadoop location的時候又出問題了,點擊右鍵不管新建或者編輯hadoop location時都沒有反應,試了幾次時就不試了,直接新建map/reduce工程,在MaxTemperature.java上右鍵run configuration中指定了輸入文件輸出文件的參數(輸入輸出文件放在項目的根目錄下)后,開始運行,然后一個窗口就跳出來了讓我配置hadoop location~~真是太賤了~~
最后輸出內容跟原文一樣,大功告成~~
參考鏈接:
http://hi.baidu.com/ihsauqaxblbdmwq/item/9ddaf2fca32315b230c199a7http://blog.csdn.net/lmc_wy/article/details/6053580
http://blog.sina.com.cn/s/blog_62186b4601012acs.html
http://blog.sina.com.cn/s/blog_62186b4601011c6a.html
http://www.oschina.net/code/snippet_176897_7976
http://blog.sina.com.cn/s/blog_6daadb2f01015rb7.html