对于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\
(...)