2013-03-06 91 views
3

示例代碼是在這裏 http://wiki.apache.org/hadoop/WordCount瞭解Hadoop的WORDCOUNT例如

我理解的邏輯,但是,我注意到,在主要功能,它僅規定了輸入和輸出路徑,但是,它從來沒有指明是什麼關鍵和價值。

如何地圖和減少功能可以認識到這一點?

public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException 

public void reduce(Text key, Iterable<IntWritable> values, Context context) 

回答

2

既然你明白Mapper和Reducer的形式是Key1,Value1,Key2,Value2,而Key1和Value1是輸入鍵值類型,Key2和Value2是輸出類型,我會解釋其餘的。

在主函數中,你會看到這樣一行說,

job.setInputFormatClass(TextInputFormat.class); 

現在,這是什麼決定了輸入文件是如何被讀取。如果您將看到的sourceTextInputFormat你會看到(在其第41行),它採用了LineRecordReadersource)打破了文件轉換成鍵值對。這裏線偏移被設置爲鍵,線本身被設置爲值。

但是就像你說的,這不是自動完成的。您可以通過編寫自己的自定義輸入格式記錄讀者類控制此行爲。

希望這清除了你的疑惑。

+0

現在更有意義,非常感謝! – 2013-03-06 07:13:20

+0

很高興能幫到你! – aa8y 2013-03-06 08:11:31

0

MapperReducer類的接口執行對mapreduce功能類型:

public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> { 
    ... 
} 

public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> { 
    ... 
} 

它們都是形式K1, V1, K2, V2其中K1, V1是輸入的鍵值類型和K2, V2都是輸出類型。

+0

我知道那些都是kvkv類型,但是,我能找到的唯一輸入文件名,它似乎像「打開文件,讀一個字節/字/行,選詞是鍵/值」部分自動完成。所以這對我來說很奇怪。 – 2013-03-06 06:04:17