API Hadoop: Формат вывода для редуктора

Я полностью запутался с API-интерфейсом Hadoop. (угадайте, что он все время меняется)

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

Итак, я использую классы заданий и конфигурации для запуска задания по уменьшению карты. Теперь мне нужно поместить выходные файлы редукторов в структуру папок на основе определенных значений, которые являются частью вывода моей карты. Я просмотрел несколько статей и обнаружил, что этого можно добиться с помощью класса 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

Спасибо!


person Ravi Bhatt    schedule 10.02.2012    source источник


Ответы (1)


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

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

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

person DNNX    schedule 11.02.2012
comment
спасибо DNNX. был на этих линиях, но хотел посмотреть, есть ли другие более простые способы сделать это. кажется, это способ сделать это. Пришлось немного изменить логику разбиения на разделы, чтобы она правильно работала с устройством записи. и это сработало. - person Ravi Bhatt; 20.02.2012