2016-01-28 3 views
2

У меня есть каталог в HDFS, содержащий около 10 000 XML-файлов. У меня есть сценарий python «processxml.py», который принимает файл и выполняет некоторую обработку на нем. Можно ли запустить скрипт во всех файлах в каталоге hdfs или мне нужно скопировать их в локальный первый, чтобы сделать это?Обработка нескольких файлов в HDFS через Python

Например, когда я запускаю скрипт на файлы в локальном каталоге у меня есть:

cd /path/to/files 

for file in *.xml 
do 
python /path/processxml.py 
$file > /path2/$file 
done 

Так в основном, как бы я идти о делать то же самое, но на этот раз файлы в HDFS?

+1

Возможно, вы измените файл processxml.py? Вы можете использовать пакет hdfs python: http://hdfscli.readthedocs.org/en/latest/quickstart.html#reading-and-writing-files, который позволяет вам обращаться к файлам без необходимости их хранения на вашем диске в качестве промежуточный шаг, но если вы не сможете изменить свой процессор xml, он, вероятно, вам не поможет. –

+0

Да, я могу изменить файл .py, я буду читать документацию ..thanks @TomDalton – Danzo

ответ

2

Вы в основном есть два варианта:

1) Использование соединителя потокового Hadoop для создания задания MapReduce (здесь вам нужно будет только карту часть). Используйте эту команду из командной строки или внутри скрипта:

hadoop jar <the location of the streamlib> \ 
     -D mapred.job.name=<name for the job> \ 
     -input /hdfs/input/dir \ 
     -output /hdfs/output/dir \ 
     -file your_script.py \ 
     -mapper python your_script.py \ 
     -numReduceTasks 0 

2) Создать PIG скрипт и отправить код питона. Вот простой пример для сценария:

input_data = LOAD '/hdfs/input/dir'; 
DEFINE mycommand `python your_script.py` ship('/path/to/your/script.py'); 
updated_data = STREAM input_data THROUGH mycommand PARALLEL 20;  
STORE updated_data INTO 'hdfs/output/dir'; 
+0

Так что не возможно просто получить доступ к файлам в HDFS по одному за раз и запустить код py на них? Что-то похожее на [здесь] (http://stackoverflow.com/questions/10686625/hadoop-fs-get-copy-only-specific-files)? @Javier – Danzo

+0

Кроме того, вы пропускаете полуколоны в примере PIG? @Javier – Danzo

+0

Да. Некоторая половина двоеточия отсутствовала. Исправлено –

0

Если вам нужно обрабатывать данные в файлах или переместить/CP/RM/и т.д.. их вокруг файловой системы, тогда PySpark (Spark с интерфейсом Python) будет одним из лучших вариантов (скорость, память).

Смежные вопросы