hadoop0.20.0第一个例子
?
這是Hadoop學(xué)習(xí)全程記錄第2篇,在這篇里我將介紹一下如何在Eclipse下寫第一個(gè)MapReduce程序。?
新說(shuō)明一下我的開(kāi)發(fā)環(huán)境:?
操作系統(tǒng):在windows下使用wubi安裝了ubuntu 10.10?
hadoop版本:hadoop-0.20.2.tar.gz?
Eclipse版本:eclipse-jee-helios-SR1-linux-gtk.tar.gz?
為了學(xué)習(xí)方便這個(gè)例子在“偽分布式模式”Hadoop安裝方式下開(kāi)發(fā)。?
第一步,我們先啟動(dòng)Hadoop守護(hù)進(jìn)程。?
如果你讀過(guò)我第1篇文章Hadoop學(xué)習(xí)全程記錄——hadoop 入門應(yīng)該比較清楚在“偽分布式模式”下啟動(dòng)Hadoop守護(hù)進(jìn)程的方法,在這里就不多說(shuō)了。?
第二步,在Eclipse下安裝hadoop-plugin。?
1.復(fù)制 hadoop安裝目錄/contrib/eclipse-plugin/hadoop-0.20.2-eclipse-plugin.jar 到 eclipse安裝目錄/plugins/ 下。?
2.重啟eclipse,配置hadoop installation directory。?
如果安裝插件成功,打開(kāi)Window-->Preferens,你會(huì)發(fā)現(xiàn)Hadoop Map/Reduce選項(xiàng),在這個(gè)選項(xiàng)里你需要配置Hadoop installation directory。配置完成后退出。?
3.配置Map/Reduce Locations。?
在Window-->Show View中打開(kāi)Map/Reduce Locations。?
在Map/Reduce Locations中新建一個(gè)Hadoop Location。在這個(gè)View中,右鍵-->New Hadoop Location。在彈出的對(duì)話框中你需要配置Location name,如myubuntu,還有Map/Reduce Master和DFS Master。這里面的Host、Port分別為你在mapred-site.xml、core-site.xml中配置的地址及端口。如:?
Map/Reduce Master?
DFS Master?
Java代碼??
?
配置完后退出。點(diǎn)擊DFS Locations-->myubuntu如果能顯示文件夾(2)說(shuō)明配置正確,如果顯示"拒絕連接",請(qǐng)檢查你的配置。?
?
第三步,新建項(xiàng)目。?
File-->New-->Other-->Map/Reduce Project?
項(xiàng)目名可以隨便取,如hadoop-test。?
復(fù)制 hadoop安裝目錄/src/example/org/apache/hadoop/example/WordCount.java到剛才新建的項(xiàng)目下面。?
第四步,上傳模擬數(shù)據(jù)文件夾。?
為了運(yùn)行程序,我們需要一個(gè)輸入的文件夾,和輸出的文件夾。輸出文件夾,在程序運(yùn)行完成后會(huì)自動(dòng)生成。我們需要給程序一個(gè)輸入文件夾。?
1.在當(dāng)前目錄(如hadoop安裝目錄)下新建文件夾input,并在文件夾下新建兩個(gè)文件file01、file02,這兩個(gè)文件內(nèi)容分別如下:?
file01?
Java代碼??
file02?
Java代碼??
2.將文件夾input上傳到分布式文件系統(tǒng)中。?
在已經(jīng)啟動(dòng)Hadoop守護(hù)進(jìn)程終端中cd 到hadoop安裝目錄,運(yùn)行下面命令:?
Java代碼??
這個(gè)命令將input文件夾上傳到了hadoop文件系統(tǒng)了,在該系統(tǒng)下就多了一個(gè)input01文件夾,你可以使用下面命令查看:?
Java代碼??
第五步,運(yùn)行項(xiàng)目。?
1.在新建的項(xiàng)目hadoop-test,點(diǎn)擊WordCount.java,右鍵-->Run As-->Run Configurations?
2.在彈出的Run Configurations對(duì)話框中,點(diǎn)Java Application,右鍵-->New,這時(shí)會(huì)新建一個(gè)application名為WordCount?
3.配置運(yùn)行參數(shù),點(diǎn)Arguments,在Program arguments中輸入“你要傳給程序的輸入文件夾和你要求程序?qū)⒂?jì)算結(jié)果保存的文件夾”,如:?
Java代碼??
這里面的input01就是你剛傳上去文件夾。文件夾地址你可以根據(jù)自己具體情況填寫。?
?
?
?
?
?
?
4.點(diǎn)擊Run,運(yùn)行程序。?
點(diǎn)擊Run,運(yùn)行程序,過(guò)段時(shí)間將運(yùn)行完成,等運(yùn)行結(jié)束后,可以在終端中用命令:?
查看是否生成文件夾output01。?
用下面命令查看生成的文件內(nèi)容:?
Java代碼??
如果顯示如下,恭喜你一切順利,你已經(jīng)成功在eclipse下運(yùn)行第一個(gè)MapReduce程序了。?
Java代碼??
?
?
?
可能遇到的問(wèn)題
1、如果遇到這個(gè)錯(cuò)誤:org.apache.hadoop.security.AccessControlException: Permission denied: user=administrator, access=EXECUTE, inode="job_201111031322_0003":heipark:supergroup:rwx-
問(wèn)題原因:本地用戶administrator(本機(jī)windows用戶)想要遠(yuǎn)程操作hadoop系統(tǒng),沒(méi)有權(quán)限引起的。
解決辦法:
a、如果是測(cè)試環(huán)境,可以取消hadoop hdfs的用戶權(quán)限檢查。打開(kāi)conf/hdfs-site.xml,找到dfs.permissions屬性修改為false(默認(rèn)為true)OK了。
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
b、修改hadoop location參數(shù),在advanced parameter選項(xiàng)卡中,找到hadoop.job.ugi項(xiàng),將此項(xiàng)改為啟動(dòng)hadoop的用戶名即可。
注意第一次設(shè)置的時(shí)候可能沒(méi)有hadoop.job.ugi參數(shù),報(bào)錯(cuò)后在去看就有了。
2、運(yùn)行例子時(shí)出現(xiàn):IOException: Cannot run program "chmod": CreateProcess error=2,
問(wèn)題原因:沒(méi)有安裝cygwin 或 沒(méi)有配置環(huán)境變量;
???????解決辦法:安裝并配置環(huán)境變量 bin到 path下 重啟 eclipse? ?問(wèn)題解決;
3、如果出現(xiàn)下面問(wèn)題
11/11/03 12:21:31 WARN mapred.LocalJobRunner: job_local_0001
???????????? java.lang.OutOfMemoryError: Java heap space
????????????? at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:781)
???????????? ?at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:350)
???????????? ?at org.apache.hadoop.mapred.MapTask.run(MapTask.java:307)
????????????? at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:177)
???????????? 11/11/03 12:21:31 INFO mapred.JobClient:? map 0% reduce 0%
???????????? 11/11/03 12:21:31 INFO mapred.JobClient: Job?complete: job_local_0001
???????????? 11/11/03 12:21:31 INFO mapred.JobClient: Counters: 0
???????????? Exception in thread "main" java.io.IOException: Job failed!
????????????? at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1252)
????????????? at mapred.WordCount.main(WordCount.java:110)
問(wèn)題原因:客戶端程序運(yùn)行時(shí)java虛擬機(jī)內(nèi)存分配不夠
解決辦法:修改run configuration,選擇Arguments選項(xiàng)卡,在VM arguments欄中加入-Xmx1024m,保存即可解決問(wèn)題。
?
總結(jié)
以上是生活随笔為你收集整理的hadoop0.20.0第一个例子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ubuntu10.04+hadoop0.
- 下一篇: 防撞库基本要求