17

私は彼らがReducerを参照していると思っていましたが、私のプログラムでは

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.setInputFormatClass、 andを使用する必要がありjob.setOutputFormatClassますか? 私のプログラムはそれらがなくても正しく実行されるからです。

4

1 に答える 1

34

呼び出すjob.setOutputKeyClass( NullWritable.class );と、マップフェーズとリデュースフェーズの両方からの出力として期待されるタイプが設定されます。

マッパーがレデューサーとは異なるタイプを放出する場合は、マッパーが放出するタイプをJobConf'ssetMapOutputKeyClass()setMapOutputValueClass()メソッドで設定できます。これらは、Reducerが期待する入力タイプを暗黙的に設定します。

(出典:Yahoo Developer Tutorial

2番目の質問に関しては、デフォルト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

のデフォルトインスタンスはOutputFormatですTextOutputFormat。これは、テキストファイルの個々の行に(キー、値)ペアを書き込みます。以下のいくつかの例:

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

(出典:その他のYahoo開発者チュートリアル

于 2013-01-08T22:41:16.413 に答える