Как передать параметр в потоковое задание Python Hadoop? - PullRequest
9 голосов
/ 01 марта 2012

Для задания потоковой передачи Hadoop на Python, как передать параметр, например, сценарию-редуктору, чтобы он вел себя по-разному в зависимости от передаваемого параметра?

Я понимаю, что потоковые задания вызываются в формате:

hadoop jar hadoop-streaming.jar -input -output -mapper mapper.py -reducer reducer.py ...

Я хочу повлиять на reducer.py.

Ответы [ 4 ]

16 голосов
/ 01 марта 2012

Аргументом для опции командной строки -reducer может быть любая команда, поэтому вы можете попробовать:

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
    -input inputDirs \
    -output outputDir \
    -mapper myMapper.py \
    -reducer 'myReducer.py 1 2 3' \
    -file myMapper.py \
    -file myReducer.py

при условии, что myReducer.py сделан исполняемым.Отказ от ответственности: я не пробовал это, но я передал подобные сложные строки -mapper и -reducer раньше.

Тем не менее, вы пробовали опцию

-cmdenv name=value

, ипросто ваш редуктор Python получает свою ценность из окружающей среды?Это просто еще один способ сделать что-то.

2 голосов
/ 11 апреля 2013

В вашем коде Python,

import os
(...)
os.environ["PARAM_OPT"]

В вашу команду Hapdoop входят:

hadoop jar \
(...)
-cmdenv PARAM_OPT=value\
(...)
1 голос
/ 02 марта 2012

Если вы используете python, вы можете проверить dumbo , который обеспечивает хорошую оболочку для потоковой передачи hadoop.В dumbo вы передаете параметры с параметром -param, как в:

dumbo start yourpython.py -hadoop <hadoop-path> -input <input> -output <output>  -param <parameter>=<value>

, а затем читаете его в редукторе

def reducer:
def __init__(self):
    self.parmeter = int(self.params["<parameter>"])
def __call__(self, key, values):
    do something interesting ...

Вы можете прочитать больше в dumbo tutorial

0 голосов
/ 29 ноября 2018

Вы можете -reducer как команда ниже

hadoop jar hadoop-streaming.jar \
-mapper 'count_mapper.py arg1 arg2' -file count_mapper.py \
-reducer 'count_reducer.py arg3' -file count_reducer.py \

Вы можете изменить это Link

...