在權威指南中,有個關於處理溫度的MapReduce類,具體如下:
第一部分:Map
public class MaxTemperatureMapper extends MapReduceBase
implements Mapper<LongWritable,Text,Text,IntWritable>{
//其他代碼
public void map(LongWritable key, Text value, OutputCollector<Text,IntWritable> output, Report reporter){
//分析一下這四個參數
該Mapper 接口是一個泛型類型,有四個形參類型,分別為:
LongWritable key Map函數的輸入鍵
Text value Map函數的輸入值
OutputCollector<Text,IntWritable> output 輸出鍵
Report reporter 輸出值
}
}
PS :Hadoop 自身提供一套可優化網絡序列化傳輸的基本類型,而不直接使用Java內嵌的類型。這些類型均在 org.apache.hadoop.io 包中。
LongWritable 類型相當於Java中的Long類型
Text類型相當於Java中的String類型
IntWritable 類型相當於Java中的Integer類型
第二部分:Reduce
Reducer類的定義和使用
public class MaxTemperatureReducer extends MapReduceBase
implements Reducer<Text, IntWritable, Text, IntWritable>{
public void reduce(Text key, Iterable<IntWritabloe> values, Context context){
}
}
pS: reduce 函數也有四個形式參數類型用於指定輸入和輸出類型。
reduce函數的輸入類型必須匹配map函數的輸出類型。
即Text類型和IntWritable 類型。
第三部:運行MapReduce作業
調用Job類的方法即可。
Job對象指定作業執行規范。