Подтвердить что ты не робот

Где относится job.setOutputKeyClass и job.setOutputReduceClass?

Я думал, что они относятся к редуктору, но в моей программе у меня есть

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 или else?

Также мне нужно использовать job.setInputFormatClass и job.setOutputFormatClass? Потому что мои программы работают без них.

4b9b3361

Ответ 1

Вызов job.setOutputKeyClass( NullWritable.class ); будет устанавливать типы, ожидаемые как выходные данные как на карте, так и на фазах уменьшения.

Если ваш Mapper испускает разные типы, чем редуктор, вы можете установить типы, испускаемые преобразователем, с помощью методов JobConf setMapOutputKeyClass() и setMapOutputValueClass(). Они неявно задают типы ввода, ожидаемые редуктором.

(источник: Yahoo Developer Tutorial)

Что касается вашего второго вопроса, по умолчанию InputFormat является TextInputFormat. Это рассматривает каждую строку каждого входного файла как отдельную запись и не выполняет синтаксический анализ. Вы можете вызвать эти методы, если вам нужно обработать ваш ввод в другом формате, вот несколько примеров:

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)