Генерация отдельных выходных файлов в Hadoop Streaming

StackOverflow https://stackoverflow.com/questions/1626786

Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top