17

我以为他们指的是减速器,但在我的程序中我有

public static class MyMapper extends Mapper< LongWritable, Text, Text, Text >

public static class MyReducer extends Reducer< Text, Text, NullWritable, Text >

所以如果我有

job.setOutputKeyClass( NullWritable.class );

job.setOutputValueClass( Text.class );

我得到以下异常

Type mismatch in key from map: expected org.apache.hadoop.io.NullWritable, recieved org.apache.hadoop.io.Text

但如果我有

job.setOutputKeyClass( Text.class );

没有问题。

我的代码有问题还是因为 NullWritable 或其他原因而发生这种情况?

我还必须使用job.setInputFormatClassandjob.setOutputFormatClass吗?因为我的程序没有它们也能正常运行。

4

1 回答 1

34

调用job.setOutputKeyClass( NullWritable.class );会将预期的类型设置为 map 和 reduce 阶段的输出。

如果您的 Mapper 发出的类型与 Reducer 不同,您可以使用JobConf'ssetMapOutputKeyClass()setMapOutputValueClass()方法设置映射器发出的类型。这些隐式设置了 Reducer 期望的输入类型。

(来源:雅虎开发者教程

关于你的第二个问题,默认InputFormatTextInputFormat. 这将每个输入文件的每一行视为单独的记录,并且不执行解析。如果您需要以不同的格式处理您的输入,您可以调用这些方法,以下是一些示例:

InputFormat             | Description                                      | Key                                      | Value
--------------------------------------------------------------------------------------------------------------------------------------------------------
TextInputFormat         | Default format; reads lines of text files        | The byte offset of the line              | The line contents
KeyValueInputFormat     | Parses lines into key, val pairs                 | Everything up to the first tab character | The remainder of the line
SequenceFileInputFormat | A Hadoop-specific high-performance binary format | user-defined                             | user-defined

OutputFormatis的默认实例TextOutputFormat,它在文本文件的各个行上写入 (key, value) 对。下面的一些例子:

OutputFormat             | Description
---------------------------------------------------------------------------------------------------------
TextOutputFormat         | Default; writes lines in "key \t value" form
SequenceFileOutputFormat | Writes binary files suitable for reading into subsequent MapReduce jobs
NullOutputFormat         | Disregards its inputs

(来源:其他雅虎开发者教程

于 2013-01-08T22:41:16.413 回答