2014-09-16 5 views
0

Я хотел бы, чтобы результат моей задачи потокового редуктора отличался для номера раздела 0, чем для других разделов. Как я могу сказать из моего скрипта, что задача редуктора работает?Как я могу указать идентификатор/номер задачи редуктора, с которым работает мой скрипт в потоке Hadoop?

ответ

1

Я только что понял, что существуют переменные окружения mapreduce_task_id и mapreduce_task_partition, из которых можно получить доступ из сценария. Они будут иметь различные значения для различных снижающих задач, например, задача 0 имеет:

mapreduce_task_id=task_1410791469618_0007_r_000000

тогда, задача 1 имеет:

mapreduce_task_id=task_1410791469618_0007_r_000001

Аналогично, задача 0 имеет:

mapreduce_task_partition=0

и

mapreduce_task_partition=1.

В Python, они могут быть доступны следующим образом:

import os 
my_task_id = os.environ.get('mapreduce_task_partition') 
+0

Да, это путь об этом. В переменных окружающей среды есть всевозможные сочные фрагменты информации, и вы даже можете пройти самостоятельно. Имейте в виду, что их формат отличается от нового дистрибутива YARN hadoop и старого. – Nonnib

+0

Thank, Nonnib. У вас есть указатель на то, где все это задокументировано? – Mateo

+0

Я сам не нашел никакой документации, просто распечатал os.environ в 1.0 и 2.0. – Nonnib

1

Как сказал Nonnib, если вы запускаете свою работу на MR2/Пряжа: mapreduce_task_id не установлен. Вместо этого используйте mapred_task_id.

Единственная ссылка у меня есть Vowpal Wabbit script (также, я использую его в моих пряжи рабочих мест, и это хорошо работает с версией до Hadoop 2.0.0-cdh4.6.0)