2013-03-06 96 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