Генерация отдельных выходных файлов в Hadoop Streaming - PullRequest
8 голосов
/ 26 октября 2009

Используя только маппер (скрипт Python) и без редуктора, как вывести отдельный файл с ключом в качестве имени файла для каждой строки вывода вместо длинных файлов вывода?

Ответы [ 3 ]

7 голосов
/ 06 ноября 2009

Классы input и outputformat можно заменить с помощью параметров командной строки -inputformat и -outputformat.

Один пример того, как это сделать, можно найти в dumbo project , который представляет собой среду Python для написания потоковых заданий. Он имеет функцию записи в несколько файлов и внутренне заменяет выходной формат классом из родственного проекта: feathers - fm.last.feathers.output.MultipleTextFiles.

Затем редуктор должен испускать кортеж в качестве ключа, причем первым компонентом кортежа будет путь к каталогу, в который должны быть записаны файлы с парами ключ / значение. Там может быть несколько файлов, это зависит от количества редукторов и приложения.

Я рекомендую заглянуть в dumbo, он имеет много функций, которые облегчают написание программ Map / Reduce на Hadoop на python.

1 голос
/ 03 ноября 2009

Вы можете записать текстовый файл в локальной файловой системе, используя функции файлов Python, или, если вы хотите использовать HDFS, использовать Thrift API .

1 голос
/ 03 ноября 2009

Можно ли заменить outputFormatClass при использовании потоковой передачи? В нативной реализации Java вы должны расширить класс MultipleTextOutputFormat и изменить метод, который называет выходной файл. Затем определите вашу реализацию как новый формат вывода с помощью метода setOutputFormat JobConf

Вы должны проверить, возможно ли это и в потоковом режиме. Я не знаю: - /

...