日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop-MapReduce 入门

發(fā)布時(shí)間:2024/1/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop-MapReduce 入门 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  從開始著手裝雙系統(tǒng),到配置Hadoop,整整五天之后才終于能運(yùn)行Eclipse里的代碼,雖然時(shí)間用得有點(diǎn)久,但是對(duì)于一個(gè)對(duì)JAVA和分布式完全不了解的小白來(lái)說(shuō),我還是蠻開心的哈哈哈~

  系統(tǒng):Win8 + Ubuntu 12.04 LtS

  前期準(zhǔn)備:最開始我是打算在虛擬機(jī)VMware里配置Hadoop,裝好了之后問同學(xué)注意事項(xiàng)的時(shí)候被告知,電腦配置不高的話虛擬機(jī)太卡,這種屬于完全分布式的模式暫時(shí)還永不到,讓我裝雙系統(tǒng)然后配置偽分布式,秉承著要“師傅另進(jìn)門”的心態(tài),準(zhǔn)備聽從大牛的建議。然后大牛辛苦了一天幫我裝上Ubuntu(其間由于電腦顯卡的問題折騰了好久,還換了個(gè)Ubuntu的版本才搞定),之后就都是我自己的事情了嗯嗯。。先配置Hadoop 和 Eclipse(http://www.cnblogs.com/kathyrine/p/3641330.html),里邊的各種命令大多都不太懂,按照網(wǎng)上的教程來(lái)弄,出了好幾個(gè)問題,好在各種查和問過(guò)同學(xué)之后搞定了。在運(yùn)行過(guò)Hadoop里自帶的 WordCount 程序之后,開始學(xué)著用?Eclipse 自己編譯和運(yùn)行代碼。


  參考鏈接:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html?一定是大牛寫的,看著人家寫的蠻簡(jiǎn)單的,運(yùn)行過(guò)程就直接說(shuō)了個(gè)運(yùn)行,其他的都沒有說(shuō),人家應(yīng)該是提前把各種小方面都配置好了,其實(shí)還蠻麻煩的。

第一個(gè)案例:數(shù)據(jù)去重,輸入是以字符串String的形式,跟我們的作業(yè)大同小異,我們的輸入只是整數(shù)。

第一步:建立輸入文件:

file1.txt 2012-3-1 a 2012-3-2 b 2012-3-3 c 2012-3-4 d 2012-3-5 a 2012-3-6 b 2012-3-7 c 2012-3-3 c file2.txt 2012-3-1 b 2012-3-2 a 2012-3-3 b 2012-3-4 d 2012-3-5 a 2012-3-6 c 2012-3-7 d 2012-3-3 c

?

第二步:寫 MapReduce 代碼:
首先要在 Eclipse 里建立 Java 的Project (name: hw),然后在 src 文件夾里 New Package (name: org.bigdata,名稱最好都是小寫,后來(lái)才知道里邊的 . 是有建立子文件夾的用處 ) ,再再這個(gè)包里 New Class (name: Dedup,首字母需要大寫,貌似是Java 寫類名的規(guī)范 )

1 package org.bigdata; 2 3 import java.io.IOException; 4 import org.apache.hadoop.conf.Configuration; 5 import org.apache.hadoop.fs.Path; 6 import org.apache.hadoop.io.Text; 7 import org.apache.hadoop.mapreduce.Job; 8 import org.apache.hadoop.mapreduce.Mapper; 9 import org.apache.hadoop.mapreduce.Reducer; 10 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 11 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 12 import org.apache.hadoop.util.GenericOptionsParser; 13 14 public class Dedup { 15 16 public static class Map extends Mapper { 17 private static Text line = new Text(); 18 19 public void map(Object key, Text value, Context context) 20 throws IOException, InterruptedException{ 21 line = value; 22 context.write(line, new Text("")); 23 } 24 } 25 26 public static class Reduce extends Reducer { 27 public void reduce(Text key, Iterable values, Context context) 28 throws IOException, InterruptedException{ 29 context.write(key, new Text("")); 30 } 31 } 32 33 public static void main(String[] args) throws Exception{ 34 Configuration conf = new Configuration(); 35 conf.set("mapred.job.tracke", "192.168.1.2:9001"); 36 37 String[] ioArgs = new String[]{"dedup_in", "dedup_out"}; 38 String[] otherArgs = new GenericOptionsParser(conf, ioArgs).getRemainingArgs(); 39 if(otherArgs.length != 2){ 40 System.err.println("Usage: Data Deduplication "); 41 System.exit(2); 42 } 43 44 Job job = new Job(conf, "Data Deduplication"); 45 job.setJarByClass(Dedup.class); 46 47 job.setMapperClass(Map.class); 48 job.setCombinerClass(Reduce.class); 49 job.setReducerClass(Reduce.class); 50 51 job.setOutputKeyClass(Text.class); 52 job.setOutputValueClass(Text.class); 53 54 FileInputFormat.addInputPath(job, new Path(otherArgs[0])); 55 FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); 56 System.exit(job.waitForCompletion(true) ? 0 : 1); 57 } 58 }

?

運(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í)沒有,需要自己去找,找了好久,第一個(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è)問題:

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è)問題我弄了好久才明白,也就是如果要寫相對(duì)路徑的話,按照下面這種寫法, input 和 output 的地址是和src的地址一樣的。然后再運(yùn)行就妥妥的了。這應(yīng)該是本地運(yùn)行,然后出現(xiàn) output 文件夾,里邊的文件part-r-0000就是運(yùn)行結(jié)果。

?

?

  下面在Hadoop上運(yùn)行,一開始我按照上面鏈接里說(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)后面又空格,且末尾輸入后又回車,http://hi.baidu.com/gaoke966/item/78dc61cfe3fac426a1b50a63)(在查看輸出文件的時(shí)候我不知道為什么必須寫絕對(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é)果如下:

?

嗯。。很開心,終于知道怎么運(yùn)行了。

轉(zhuǎn)載于:https://www.cnblogs.com/kathyrine/p/3641450.html

總結(jié)

以上是生活随笔為你收集整理的Hadoop-MapReduce 入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。