map-reduce框架的運作完全基於對,即資料的輸入是一批對,生成的結果也是一批對,只是有時候它們的型別不一樣而已。key和value的類由於需要支援被序列化(serialize)操作,所以它們必須要實現writable介面,而且key的類還必須實現writablecomparable介面,使得可以讓框架對資料集的執行排序操作。
乙個map-reduce任務的執行過程以及資料輸入輸出的型別如下所示:
[color=orange](input)-> map -> -> combine -> -> reduce -> (output)[/color]
下面通過乙個的例子並結合源**來詳細說明這個過程
3.1 wordcount示例
這也是hadoop自帶的乙個例子,目標是統計文字檔案中單詞的個數。
hello world bye world
hello hadoop goodbye hadoop
3.2 map資料輸入
hadoop針對文字檔案預設使用linerecordreader類來實現讀取,一行乙個key/value對,key取偏移量,value為行內容。
如下是map1的輸入資料:
key1 value1
0 hello world bye world
如下是map2的輸入資料:
key1 value1
0 hello hadoop goodbye hadoop
3.3 map輸出/combine輸入
如下是map1的輸出結果
key2 value2
hello 1
world 1
bye 1
world 1
如下是map2的輸出結果
key2 value2
hello 1
hadoop 1
goodbye 1
hadoop 1
3.4 combine輸出
combiner類實現將相同key的值合併起來,它也是乙個reducer的實現。
如下是combine1的輸出
key2 value2
hello 1
world 2
bye 1
如下是combine2的輸出
key2 value2
hello 1
hadoop 2
goodbye 1
3.5 reduce輸出
reducer類實現將相同key的值合併起來。
如下是reduce的輸出
key2 value2
hello 2
world 2
bye 1
hadoop 2
goodbye 1
即實現了wordcount的處理
MapReduce工作原理
本文的目錄 1.mapreduce作業執行流程 2.map reduce任務中shuffle和排序的過程 mapreduce作業詳細的執行流程 流程分析 1.在客戶端啟動乙個作業。2.向jobtracker請求乙個job id。3.將執行作業所需要的資源檔案複製到hdfs上,包括mapreduce程...
map reduce工作原理
下面的圖來自南京大學計算機系黃宜華老師開設的mapreduce課程的課件,這裡稍作整理和 總結。本文旨在對接觸了mapreduce之後,但是對mapreduce的工作流程仍不是很清楚的人員,當然包括博主自己,希望與大家一起學習。mapreduce借鑑了函式式程式語言lisp中的思想,lisp lis...
MapReduce工作原理
一切都是從最上方的user program開始的,user program鏈結了mapreduce庫,實現了最基本的map函式和reduce函式。mapreduce庫先把user program的輸入檔案劃分為m份 m為使用者定義 每乙份通常有16mb到64mb,如圖左方所示分成了split0 4 ...