Как управлять именем выходных файлов и содержимым потокового задания Hadoop? - PullRequest
6 голосов
/ 20 мая 2009

Есть ли способ управления именами выходных файлов задания потоковой передачи Hadoop? В частности, я хотел бы, чтобы содержимое и имя выходных файлов моей работы были организованы кет выводами редуктора - каждый файл будет содержать значения только для одного ключа, а его имя будет ключом.

Обновление: Только что нашел ответ - Использование класса Java, производного от MultipleOutputFormat, в качестве формата вывода заданий позволяет контролировать имена выходных файлов. http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/mapred/lib/MultipleOutputFormat.html

Я не видел образцов для этого там ... Кто-нибудь может указать на пример потоковой передачи Hadoop, в котором используется пользовательский формат вывода класса Java?

Ответы [ 2 ]

8 голосов
/ 05 августа 2009

Использование класса Java, производного от MultipleOutputFormat, в качестве формата вывода заданий позволяет управлять именами выходных файлов. http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/mapred/lib/MultipleOutputFormat.html

При использовании потоковой передачи Hadoop, поскольку поддерживается только один JAR-файл, вам фактически нужно раскошелиться на потоковую флягу и поместить в нее новые классы выходного формата, чтобы потоковые задания могли ссылаться на нее ...

EDIT: Начиная с версии 0.20.2 hadoop этот класс устарел, и теперь вы должны использовать: http://hadoop.apache.org/docs/mapreduce/current/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html

0 голосов
/ 24 мая 2009

В общем, Hadoop заставляет вас рассматривать весь каталог как выходной, а не отдельный файл. Нет никакого способа напрямую контролировать имя файла, будь то потоковое или обычное Java-задание.

Однако ничто не мешает вам выполнить это разделение и переименовать себя после того, как работа завершена. Вы можете $ HADOOP dfs -cat path / to / your / output / directory / part- * и передать его вашему скрипту, который разбивает содержимое по ключам и записывает его в новые файлы.

...