Hadoop API: выходной формат для редуктора - PullRequest
1 голос
/ 10 февраля 2012

Я полностью сбит с толку API hadoop. (угадайте, что он постоянно меняется)

Если я не ошибаюсь, JobConf был deprecated, и вместо этого мы должны были использовать классы Job и Configuration для запуска задания по уменьшению карты из Java. похоже, что в недавно выпущенном hadoop 1.0.0 JobConf больше не устарела!

Так что я использую Job и классы конфигурации для запуска карты уменьшить работу. Теперь мне нужно поместить выходные файлы редукторов в структуру папок на основе определенных значений, которые являются частью моего вывода карты. Я просмотрел несколько статей и обнаружил, что этого можно достичь с помощью класса OutputFormat, но у нас есть этот класс в двух пакетах:

org.apache.hadoop.mapred and 
org.apache.hadoop.mapreduce 

В нашем job объекте мы можем установить класс выходного формата как:

job.setOutputFormatClass(SomeOutputFormat.class);

Теперь, если SomeOutputFormat extends скажем org.apache.hadoop.mapreduce.lib.output.FileOutputFormat, мы получим один метод с именем getRecordWriter();, который никак не поможет переопределить выходной путь.

Есть и другой способ использования jobConf, но, опять же, похоже, что он не работает с точки зрения установки mappers, reducers, partitions, sorting and grouping классов.

Есть ли что-то очень очевидное, чего мне не хватает? Я хочу записать мой файл сокращения вывода в папку, основанную на значении. например, SomeOutputPrefix/Value1/Value2/realReduceFileName

Спасибо!

1 Ответ

0 голосов
/ 11 февраля 2012

Я думаю, вам нужно реализовать

  1. ваш собственный класс формата вывода и
  2. ваш собственный RecordWriter, который будет записывать разные значения в разные места

Таким образом, ваш SomeOutputWriter вернет new SomeRecordWriter("SomeOutputPrefix") в своем методе getRecordWriter(), а SomeRecordWriter запишет разные значения в разные папки.

...