本文在上一節的基礎上通過一個簡單的MR示例對MapReduce的運作流程進行分析。
假設有兩行資料,分别是hello you,hello me,我們要統計其中出現的單詞以及每個單詞出現的次數。
所得的結果為
hello 2
you 1
me 1
(1)大緻運作流暢
1.解析成2個<k,v>,分别是<0, hello you><10, hello me>。調用2次map函數。
2.執行map任務
3.map輸出後的資料是:<hello,1>,<you,1>,<hello,1>,<me,1>
4.排序後是:<hello,1>,<hello,1>,<me,1>,<you,1>
5.分組後是:<hello,{1,1}>,<me,{1}>,<you,{1}>
6.執行reduce任務,reduce函數被調用的次數是3
7.輸出
(2)相關代碼
所有的項目依舊為以前所用的myhadoop項目
①在src下建立org.apache.hadoop.fs包,把FileUtil這個類檔案拷貝到這個包,FileUtil在附件中給出,隻需建立一個FileUtil類,将内容拷貝至其中。(這一步主要是為了給權限的)
②在myhadoop項目下建立一個mapreduce包,在這個包下建立一個名為WordCountApp的java類。
1.重寫map類,代碼如下:
其中Mapper泛型中的四個類型分别表示KEYIN,VALUEIN,KEYOUT,VALUEOUT。
KEYIN即k1,表示行的偏移量
VALUEIN即v1,表示行文本内容
KEYOUT即k2,表示行中出現的單詞
VALUEOUT即v2,表示行中出現的單詞的次數,這裡為固定值1。
2.重寫Reducer類,代碼如下:
其中Reducer泛型中的四個類型也表示KEYIN,VALUEIN,KEYOUT,VALUEOUT。
KEYIN即k2,表示行中出現的單詞
VALUEIN即v2,表示行中出現的單詞的次數
KEYOUT即k3,表示文本中出現的不同單詞
VALUEOUT即v3,表示文本中出現的不同單詞的總次數1。
3.寫main方法,代碼如下:
相關代碼的所有内容,已經在附件中。
(3)運作檢視結果
編寫完代碼後運作即可:
運作完成後,可以去HDFS中進行檢視:
可以看到HDFS中有了/out檔案夾,檔案夾中多了兩個檔案。
檢視其中的part-r-00000檔案,内容如下:
這就是我們想要得到的内容。
本文出自 “” 部落格,轉載請與作者聯系!