注:本文涉及書中2.1~2.3小結(jié)
1. MapReduce任務(wù)過程:map和reduce
MapReduce任務(wù)過程分為兩個處理階段:map階段和reduce階段。每個階段都以鍵值對作為輸入和輸出,其類型有程序員來選擇。程序員還需要寫兩個函數(shù):map函數(shù)和reduce函數(shù)。
本書以氣象數(shù)據(jù)的例子講述了MapReduce的工作原理。
2. Java MapReduce
實現(xiàn)MapReduce需要三個部分:map函數(shù)、reduce函數(shù)和一些用來運行作業(yè)的代碼。
1. map函數(shù)由Mapper類實現(xiàn),Mapper類聲明一個map()虛方法。Mapper類是一個泛型類型,有4個形參類型,分別指定map函數(shù)的輸入鍵、輸入值、輸出鍵、輸出值的類型。
補充:
Mapper類是Hadoop提供的一個抽象類,我們可以繼承這個基類并實現(xiàn)其中的相關(guān)接口函數(shù).
Hadoop1.2.1中對Mapper類的定義如下:
public class Mapper<KEYIN, VALUEIN, KEYIN, VALUEIN>
Mapper類包含4個方法:setup(), map(), cleanup(), run()。其中,map方法是Mapper類的核心成員,主要工作都是在這里完成的,應(yīng)用程序一般都會根據(jù)實際需要override該方法。
protected void map(KEYIN key, VALUEIN value, Context context)
其中key是傳入map的鍵值,value是對應(yīng)鍵值的value值,context是環(huán)境對象變量,供程序訪問Hadoop的環(huán)境參數(shù)
map方法對輸入的鍵值對進行處理,產(chǎn)生一系列的中間鍵值對,轉(zhuǎn)換后的中間鍵值對可以有新的鍵值類型。
看完源碼,感覺需要看看Java了T T
注:Hadoop本身提供了一套可優(yōu)化網(wǎng)絡(luò)序列化傳輸?shù)幕绢愋?,而不直接使用Java內(nèi)嵌的類型,這些類型都在org.aache.hadoop.io包中。
2. 同理,reduce函數(shù)由Reducer類實現(xiàn)。Reducer類也有4個形參類型,用于指定輸入鍵、輸入值、輸出鍵、輸出值的類型。reduce函數(shù)的輸入類型必須匹配map函數(shù)的輸出類型。
3. 寫運行MapReduce的作業(yè)代碼。
注:
書中2.3小結(jié)給出了Hadoop在本地文件系統(tǒng)上的分析最高氣溫的實例,下一步準備對其進行復現(xiàn)。