Hadoop-MapReduce 入门
從開(kāi)始著手裝雙系統(tǒng),到配置Hadoop,整整五天之后才終于能運(yùn)行Eclipse里的代碼,雖然時(shí)間用得有點(diǎn)久,但是對(duì)于一個(gè)對(duì)JAVA和分布式完全不了解的小白來(lái)說(shuō),我還是蠻開(kāi)心的哈哈哈~
系統(tǒng):Win8 + Ubuntu 12.04 LtS
前期準(zhǔn)備:最開(kāi)始我是打算在虛擬機(jī)VMware里配置Hadoop,裝好了之后問(wèn)同學(xué)注意事項(xiàng)的時(shí)候被告知,電腦配置不高的話虛擬機(jī)太卡,這種屬于完全分布式的模式暫時(shí)還永不到,讓我裝雙系統(tǒng)然后配置偽分布式,秉承著要“師傅另進(jìn)門(mén)”的心態(tài),準(zhǔn)備聽(tīng)從大牛的建議。然后大牛辛苦了一天幫我裝上Ubuntu(其間由于電腦顯卡的問(wèn)題折騰了好久,還換了個(gè)Ubuntu的版本才搞定),之后就都是我自己的事情了嗯嗯。。先配置Hadoop 和 Eclipse(http://www.cnblogs.com/kathyrine/p/3641330.html),里邊的各種命令大多都不太懂,按照網(wǎng)上的教程來(lái)弄,出了好幾個(gè)問(wèn)題,好在各種查和問(wèn)過(guò)同學(xué)之后搞定了。在運(yùn)行過(guò)Hadoop里自帶的 WordCount 程序之后,開(kāi)始學(xué)著用?Eclipse 自己編譯和運(yùn)行代碼。
參考鏈接:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html?一定是大牛寫(xiě)的,看著人家寫(xiě)的蠻簡(jiǎn)單的,運(yùn)行過(guò)程就直接說(shuō)了個(gè)運(yùn)行,其他的都沒(méi)有說(shuō),人家應(yīng)該是提前把各種小方面都配置好了,其實(shí)還蠻麻煩的。
第一個(gè)案例:數(shù)據(jù)去重,輸入是以字符串String的形式,跟我們的作業(yè)大同小異,我們的輸入只是整數(shù)。
第一步:建立輸入文件:
?
第二步:寫(xiě) MapReduce 代碼:
首先要在 Eclipse 里建立 Java 的Project (name: hw),然后在 src 文件夾里 New Package (name: org.bigdata,名稱(chēng)最好都是小寫(xiě),后來(lái)才知道里邊的 . 是有建立子文件夾的用處 ) ,再再這個(gè)包里 New Class (name: Dedup,首字母需要大寫(xiě),貌似是Java 寫(xiě)類(lèi)名的規(guī)范 )
?
運(yùn)行 Ctrl + F11 之后會(huì)發(fā)現(xiàn)有很多錯(cuò)誤,各種手足無(wú)措。按照Console上面的錯(cuò)誤信息一個(gè)一個(gè)Google 發(fā)現(xiàn)是因?yàn)槿鄙?Hadoop 相關(guān)外部引用的 jar 包,這些包不會(huì)自動(dòng)添加,需要手動(dòng)加進(jìn)來(lái),網(wǎng)上有很多說(shuō)法是在下載hadoop/lib 文件夾里又這些 jar 文件,其實(shí)沒(méi)有,需要自己去找,找了好久,第一個(gè)下載得蠻快的。參考下載地址:
http://repo1.maven.org/maven2/org/apache/hadoop/hadoop-core/1.2.1/
http://www.java2s.com/Code/Jar/h/Downloadhadoopcore121jar.htm
方法:http://www.crifan.com/java_eclipse_the_import_org_apache_cannot_be_resolved/
選擇 “Configure Build Path"
?
選擇 Add External JARs,(將之前下載的hadoop-core-1.2.1.jar 解壓到 hadoop/lib里),將 jar 包都加進(jìn)來(lái)。然后運(yùn)行,在Java里的各種輸入地址特別關(guān)鍵,否則就會(huì)出現(xiàn)這個(gè)問(wèn)題:
14/03/30 14:04:36 ERROR security.UserGroupInformation: PriviledgedActionException as:kxxie cause:org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: file:/home/kxxie/workspace/hw/dedup_in Exception in thread "main" org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: file:/home/kxxie/workspace/hw/dedup_in先明確當(dāng)前目錄是和src同級(jí)的目錄,這個(gè)問(wèn)題我弄了好久才明白,也就是如果要寫(xiě)相對(duì)路徑的話,按照下面這種寫(xiě)法, input 和 output 的地址是和src的地址一樣的。然后再運(yùn)行就妥妥的了。這應(yīng)該是本地運(yùn)行,然后出現(xiàn) output 文件夾,里邊的文件part-r-0000就是運(yùn)行結(jié)果。
?
?
下面在Hadoop上運(yùn)行,一開(kāi)始我按照上面鏈接里說(shuō)的,先在DFS Locations 的 /user/kxxie下建立 input 文件夾,Upload上面兩個(gè)輸入文件,然后在Eclipse里選擇 Run on Hadoop就可以了。但是運(yùn)行完之后跟大牛說(shuō)的不一樣,不會(huì)在DFS里不會(huì)出現(xiàn) output 文件夾。然后舍棄了直接用的方法,不知道是不是尤其他的設(shè)置。
運(yùn)行成功的方法如下:http://blog.sina.com.cn/s/blog_5d2184eb0100r0tz.html
?
如果想用Hadoop,要編譯Dedup.java文件,將其制作成可執(zhí)行的 jar包,(有同學(xué)告訴我說(shuō)不這樣也成功過(guò),但是我不知到要怎么做),方法如下:
在終端輸入命令:? javac /org/bigdata/Dedup.java? (前提是已經(jīng)在編輯好了系統(tǒng)環(huán)境變量 classpath)
在org同級(jí)目錄上建立manifest.mf:(Java項(xiàng)目中manifest.mf的作用:http://blog.sina.com.cn/s/blog_9075354e0101kc37.htm)輸入命令:?$ vim manifest.mf?,插入
Main-Class: org.bigdata.Dedup (注意在冒號(hào)后面又空格,且末尾輸入后又回車(chē),http://hi.baidu.com/gaoke966/item/78dc61cfe3fac426a1b50a63)(在查看輸出文件的時(shí)候我不知道為什么必須寫(xiě)絕對(duì)路徑,相對(duì)路徑怎么也不對(duì))
$ jar -cvfm Dedup.jar manifest.mf org/ $ hadoop jar Dedup.jar input output $ hadoop fs -cat /user/kxxie/output/part-r-00000運(yùn)行結(jié)果如下:
?
嗯。。很開(kāi)心,終于知道怎么運(yùn)行了。
轉(zhuǎn)載于:https://www.cnblogs.com/kathyrine/p/3641450.html
總結(jié)
以上是生活随笔為你收集整理的Hadoop-MapReduce 入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: keepalived实现haproxy高
- 下一篇: c语言输入与输出库函数#includes