2012-03-01 21 views
7

Dla zadania przesyłania strumieniowego Hoonop Hoonop, w jaki sposób przekazać parametr do, na przykład, skryptu reduktora, aby zachowywał się on inaczej w zależności od przekazywanego parametru?Jak przekazać parametr do zadania przesyłania strumieniowego Hadoop Pythona?

Rozumiem, że strumieniowe pracy nazywane są w formacie:

Hadoop słoik Hadoop-streaming.jar -input -Output -mapper mapper.py -reducer reducer.py ...

chcę wpływać na reducer.py.

Odpowiedz

14

Argument opcji wiersza poleceń -reducer mogą być dowolne polecenie, więc można spróbować:

$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 

zakładając myReducer.py jest wykonywalny. Zastrzeżenie: Nie próbowałem go, ale przeszły podobne skomplikowane ciągi do -mapper i -reducer wcześniej.

Powiedział, że próbowałeś opcji

-cmdenv name=value 

, i po prostu mieć swój reduktor Python uzyskać jego wartość od środowiska? To po prostu inny sposób robienia rzeczy.

1

Jeśli używasz Pythona, możesz wypróbować numer dumbo, który zapewnia ładną panoramę streamingu hadoopów. W Dumbo przekazać parametry z -param jak w:

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

a następnie odczytać je w reduktor

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

można przeczytać więcej w dumbo tutorial

2

W kodzie Pythona,

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

Do polecenia Hapdoop należą:

hadoop jar \ 
(...) 
-cmdenv PARAM_OPT=value\ 
(...) 
Powiązane problemy