了解hadoop wordcount示例

xoshrz7s  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(321)

示例代码在这里http://wiki.apache.org/hadoop/wordcount
我理解这个逻辑,但是我注意到在main函数中,它只指定了输入和输出路径,但是它从来没有指定什么是键和值。
map和reduce函数如何解决这个问题?

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

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

o3imoua41#

既然您了解Map器和reducer的格式是key1、value1、key2、value2,并且key1和value1是输入键值类型,key2和value2是输出类型,那么我将解释其余的内容。
在main函数中,你会看到一行,上面写着,

job.setInputFormatClass(TextInputFormat.class);

现在,这决定了如何读取输入文件。如果你看看 TextInputFormat 您将看到(在第41行中)它使用 LineRecordReader (source)将文件分解为键值对。在这里,行偏移被设置为键,行本身被设置为值。
但就像你说的,这不是自动完成的。您可以通过编写自己的自定义输入格式和记录读取器类来控制此行为。
希望这能消除你的疑虑。

a64a0gku

a64a0gku2#

的接口 Mapper 以及 Reducer 类在 map 以及 reduce 功能:

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 是输出类型。

相关问题