Какой лучший способ иметь несколько выходов для работы с использованием стабильной версии Hadoop? - PullRequest
0 голосов
/ 04 марта 2012

У меня есть задание mapreduce, роль которого состоит в том, чтобы разбить мой входной файл на два файла в соответствии с заданным критерием.В настоящее время я использую Hadoop r0.20.203, потому что это текущая стабильная версия
Эта версия предлагает два API:

Как вы можете себе представить, я использую новый API, и моя проблема в том, что Hadoop r0.20.203 не предлагает никаких форматов MultipleOutput в новом API.
Hadoop 0.20.203 все еще предлагает MultipleTextOutputFormat и MultipleTextOutputs (которые подходят для моего случая) в старом API .Более того, более новый Hadoop 0.22 предлагает MultipleOutputs в новом API.

Я вижу четыре решения моей проблемы:

  • Переключитесь на Hadoop 0.22.Проблема с этим решением состоит в том, что версия не может быть развернута на кластерах, которые я использую, из-за своего бета-статуса.
  • Используйте старый API для этого конкретного задания и новый для других.Я видел, что старый API в Hadoop 1.0.0 не устарел, так что его все еще можно использовать?Если позже мне потребуется перейти на более новую версию Hadoop, мне нужно будет переписать только эту работу.
  • Используйте старый API для всех моих заданий, чтобы избежать проблем совместимости / согласованности.Как вы думаете, это может повредить развитию моей программы?Особенно, если мне нужно переключиться на более новую версию Hadoop позже.
  • Забудьте о нескольких выходах и найдите другое решение.

Что бы вы сделали, если бы вы были мной?

Ответы [ 2 ]

1 голос
/ 04 марта 2012

Поскольку на него полагается так много кода и поскольку новый API (как вы обнаружили) никогда не был полностью реализован, они, вероятно, не одобряют старый API в будущей версии Hadoop. Я бы использовал старый API и не беспокоился об этом.

См. http://www.cloudera.com/blog/2010/08/what%E2%80%99s-new-in-apache-hadoop-0-21/

0 голосов
/ 04 марта 2012

Почему бы вам не поместить исходный код в свой проект и не использовать его?

http://grepcode.com/file_/repository.cloudera.com/content/repositories/releases/com.cloudera.hadoop/hadoop-core/0.20.2-737/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.java/?v=source

Он должен быть совместим с r0.20.203, на самом деле я не вижу классов, которые не должны быть доступны в более старой версии.

И в этом нет ничего волшебного, он просто настраивает несколько рекордеров для каждого сконфигурированного вывода (тип и прочее). Могу поспорить, что вы могли бы написать свой собственный во время постановки вопроса

...