Получить имя входного файла в потоковой программе hadoop - PullRequest
7 голосов
/ 16 сентября 2011

Я могу найти имя, если входной файл в классе сопоставления использует FileSplit при написании программы на Java.

Есть ли соответствующий способ сделать это, когда я пишу программу на Python (используя потоковую передачу?)

Я нашел следующее в потоковом документе hadoop на apache:

См. Настроенные параметры. Во время выполнения потокового задания, имена параметров "mapred" преобразуются. Точки (.) стать подчеркиванием (_). Например, mapred.job.id становится mapred_job_id и mapred.jar становятся mapred_jar. В вашем коде используйте имена параметров с подчеркиванием.

Но я все еще не могу понять, как использовать это в моем картографе.

Любая помощь высоко ценится.

Спасибо

Ответы [ 3 ]

7 голосов
/ 17 сентября 2011

Согласно «Hadoop: полное руководство»

Hadoop устанавливает параметры конфигурации задания в качестве переменных среды для потоковых программ.Однако он заменяет не алфавитно-цифровые символы подчеркиванием, чтобы убедиться, что они являются допустимыми именами.Следующее выражение Python иллюстрирует, как вы можете извлечь значение свойства mapred.job.id из скрипта Python Streaming:

os.environ ["mapred_job_id"]

Вы также можете установитьПеременные среды для процесса Streaming, запущенного MapReduce, с помощью параметра -cmdenv для программы запуска Streaming (один раз для каждой переменной, которую вы хотите установить).Например, следующее устанавливает переменную среды MAGIC_PARAMETER:

-cmdenv MAGIC_PARAMETER = abracadabra

5 голосов
/ 23 июля 2014

Анализируя переменную среды mapreduce_map_input_file (новая) или map_input_file (устарела), вы получите имя входного файла карты.

Примечание:
Две переменные среды чувствительны к регистру , все буквы строчные .

0 голосов
/ 26 июня 2014

Новый ENV_VARIABLE для Hadoop 2.x - MAPREDUCE_MAP_INPUT_FILE

...