11

Python Hadoop ストリーミング ジョブの場合、たとえばレデューサー スクリプトにパラメーターを渡して、渡されるパラメーターに基づいて異なる動作をさせるにはどうすればよいですか?

ストリーミング ジョブが次の形式で呼び出されることを理解しています。

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

reducer.py に影響を与えたい。

4

4 に答える 4

18

コマンド ライン オプションの引数には-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 レデューサーに環境から値を取得させるだけですか? それは物事を行う別の方法です。

于 2012-03-01T01:02:56.693 に答える
2

Python コードでは、

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

Hapdoop コマンドに以下を含めます。

hadoop jar \
(...)
-cmdenv PARAM_OPT=value\
(...)
于 2013-04-10T20:50:59.877 に答える
1

Pythonを使用している場合は、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 ...

あなたはダンボチュートリアルでもっと読むことができます

于 2012-03-02T14:22:40.137 に答える