Лучший способ обрабатывать строки данных из файла hdfs из CPython (без использования stdin)? - PullRequest
4 голосов
/ 19 декабря 2011

Я хотел бы использовать CPython в потоковом задании Hadoop, которому необходим доступ к дополнительной информации из строкового файла, хранящегося в файловой системе Hadoop. Под «дополнительным» я подразумеваю, что этот файл является дополнением к информации, передаваемой через stdin. Дополнительный файл достаточно велик, и я не могу просто вылить его в память и разобрать символы конца строки. Есть ли особенно элегантный способ (или библиотека) для обработки этого файла по одной строке за раз?

Спасибо

SetJmp

Ответы [ 2 ]

3 голосов
/ 19 декабря 2011

Ознакомьтесь с этой документацией для потоковой передачи для использования распределенного кэша Hadoop в заданиях потоковой передачи Hadoop.Сначала вы загружаете файл в hdfs, затем говорите Hadoop о необходимости реплицировать его повсюду, прежде чем запускать задание, затем он удобно помещает символическую ссылку в рабочий каталог задания.Затем вы можете просто использовать Python open() для чтения файла с for line in f или любым другим.

Распределенный кеш - это наиболее эффективный способ перемещения файлов (из коробки) для задания, которое можно использовать какресурс.Вы не хотите просто открывать файл hdfs из своего процесса, поскольку каждая задача будет пытаться выполнить потоковую передачу файла по сети ... В распределенном кэше загружается одна копия, даже если на одном узле выполняется несколько задач.


Сначала добавьте -files hdfs://NN:9000/user/sup.txt#sup.txt к аргументам командной строки при запуске задания.

Затем:

for line in open('sup.txt'):
    # do stuff
1 голос
/ 19 декабря 2011

Вы ищете это?

http://pydoop.sourceforge.net/docs/api_docs/hdfs_api.html#module-pydoop.hdfs

with pydoop.hdfs.open( "supplementary", "r" ) as supplementary:
    for line in supplementary:
        # process line
...