Ответ 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)