2012-03-01 8 views
7

एक पाइथन हडोप स्ट्रीमिंग नौकरी के लिए, मैं पैरामीटर कैसे पास करूं, उदाहरण के लिए, reducer स्क्रिप्ट ताकि यह पारित होने वाले पैरामीटर के आधार पर अलग-अलग व्यवहार करे?मैं एक पाइथन हडोप स्ट्रीमिंग नौकरी के लिए पैरामीटर कैसे पास करूं?

मैं समझता हूँ कि स्ट्रीमिंग नौकरियों के प्रारूप में कहा जाता है:

Hadoop जार Hadoop-streaming.jar -Input आउटपुट -mapper mapper.py -reducer reducer.py ...

मैं चाहता हूँ reducer.py को प्रभावित करने के लिए।

उत्तर

14

आदेश पंक्ति विकल्प -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 

विकल्प की कोशिश की है, और सिर्फ अपने अजगर कम करने के माहौल से अपने मूल्य मिल गया है? यह चीजों को करने का एक और तरीका है।

1

यदि आप अजगर का उपयोग कर रहे हैं तो आप 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

2

में अधिक पढ़ सकते हैं अपने अजगर कोड में,

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

आपके हैपडॉप कमांड में शामिल हैं:

hadoop jar \ 
(...) 
-cmdenv PARAM_OPT=value\ 
(...) 
संबंधित मुद्दे