對於python Hadoop流式作業,我如何將一個參數傳遞給例如reducer腳本,以便根據傳入的參數使其行爲不同?如何將參數傳遞給python Hadoop串流作業?
據我所知,流作業稱爲格式:
Hadoop的罐子Hadoop的streaming.jar - 輸入 - 輸出-mapper mapper.py -reducer reducer.py ...
我想影響reducer.py。
對於python Hadoop流式作業,我如何將一個參數傳遞給例如reducer腳本,以便根據傳入的參數使其行爲不同?如何將參數傳遞給python Hadoop串流作業?
據我所知,流作業稱爲格式:
Hadoop的罐子Hadoop的streaming.jar - 輸入 - 輸出-mapper mapper.py -reducer reducer.py ...
我想影響reducer.py。
的參數命令行選項-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減速從環境中獲取它的價值?這只是另一種做事的方式。
如果你正在使用python,你可能想看看dumbo,它提供了一個很好的Hadoop流式封裝。 在小飛象你通過與-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
在Python代碼,
import os
(...)
os.environ["PARAM_OPT"]
在您的Hapdoop命令中包含:
hadoop jar \
(...)
-cmdenv PARAM_OPT=value\
(...)