Map和Reduce兩個處理階段app
每一個階段都以「鍵值對」做爲輸入和輸出框架
Map函數提取年份和睦溫信息,得到以下數據:函數
(1950,0)oop
(1950,22)spa
(1950,-11)對象
(1949,111)排序
(1949,78)input
map函數的輸出經由MapReduce框架處理後,最後發送到reduce函數string
這個處理過程基於鍵來對鍵值對進行排序和分組it
reduce函數能夠看到以下輸入:
(1949, [111,78])
(1950, [0, 22, -11])
reduce函數,如今要作的是遍歷整個列表,從中找出最大的讀書:
(1949, 111)
(1950, 22)
這是最終輸出結果:每年的全球最高氣溫記錄。
MapReduce邏輯數據流:
一、input、cat *
二、map、map.rb
三、shuffle、sort
四、reduce、reduce.rb
五、output、output
示例
一個map函數
一個reduce函數
一些用來運行做業的代碼
map函數,由Mapper類實現 來表示
Mapper類聲明一個map()虛方法......
Mapper類,是一個泛型類型,有四個形參類型,分別指定map函數的輸入鍵、輸入值、輸出鍵、輸出值
輸入鍵:一個長整數偏移量
輸入值:一行文本
輸出鍵:年份
輸出值:氣溫(整數)
map()方法的輸入,是一個鍵和一個值,首先將包含有一行輸入的Text值轉換成Java的String類型,而後使用substring()方法提取須要的列。
map()方法還提供Context實例用於輸出內容的寫入。將年份數據按Text對象讀寫(年份做爲鍵),將氣溫值封裝在IntWritable類型中。
只有氣溫數據不缺而且所對應質量代碼顯示爲正確的氣溫讀數時,這些數據纔會被寫入輸出記錄中。
一樣,reduce函數也有四個形式參數類型用於指定輸入和輸出類型。
輸入類型必須匹配map函數的輸出類型,即:Text和IntWritable類型
所以,輸出類型也必須是Text和IntWritable類型。
這個最高氣溫是經過循環比較每一個氣溫與當前所知最高氣溫所獲得的。
Job對象指定做爲執行規範,控制整個做業的運行。
構造Job對象以後,須要指定輸入和輸出數據的路徑。
這個路徑,能夠是單個的文件、一個目錄、或符合特定文件模式的一系列文件。
由函數名可知,能夠屢次調用addInputPath()來實現多路徑的輸入。
setOutPath()指定輸出路徑,指定的是reduce函數輸出文件的寫入目錄
在運行做業前,該目錄是不該該存在的。不然Hadoop會報錯並拒絕運行做業。(目的:放置數據丟失【被覆蓋】)
2.4 橫向擴展