2

現在のバージョンのhadoop-streamingには、コンバイナー用のJavaクラスが必要ですが、次のようなハックを使用できることをどこかで読みました。

hadoop jar ./contrib/streaming/hadoop-0.20.2-streaming.jar  -input /testinput -output /testoutput -mapper "python /code/triples-mapper.py | sort | python /code/triples-reducer.py" -reducer /code/triples-reducer.py 

ただし、これは機能していないようです。私は何が間違っているのですか?

4

1 に答える 1

0

あなたの問題は次の情報源のどこかにあると思います。

http://svn.apache.org/viewvc/hadoop/common/tags/release-0.20.2/src/contrib/streaming/src/java/org/apache/hadoop/streaming/PipeMapRed.java?view=markup

splitArgs()渡したコマンドをトークン化する69行目のメソッド:

python /code/triples-mapper.py | sort | python /code/triples-reducer.py

実行するコマンドに:(/code/triples-mapper.py行131/132)、次に渡す引数のセット。すべてのトークンがProcessBuilderに渡されます(行164)

ProcessBuilder用のJavaAPI

したがって、パイプはOSによって解釈されず、マッパーに引数として渡されます(マッパーコード内に渡された引数をダンプすることで、これを確認できるはずです)

これはすべて0.20.2であるため、hadoopの以降のバージョンでの目的に合わせて「修正」されている可能性があります。

于 2012-03-30T11:32:03.610 に答える