2

Hadoop ストリーミングを使用しているときに、これらの問題に遭遇しました。Pythonでコードを書いています

1) 集合ライブラリパッケージ

Hadoop ストリーミング ドキュメントによると ( http://hadoop.apache.org/common/docs/r0.20.0/streaming.html#Working+with+the+Hadoop+Aggregate+Package+%28the+-reduce+aggregate+option%29 )、マッパーとリデューサーの両方として機能する組み込みの Aggregate クラスがあります。

コマンドは次のとおりです。

shell> hadoop jar hadoop-streaming.jar -file mapper.py -mapper mapper.py -combiner aggregate -reducer NONE -input input_files -output output_path

このコマンドを実行すると、マッパーは次のエラーで失敗します。

java.io.IOException: Cannot run program "aggregate": java.io.IOException: error=2, No such file or directory

ただし、コンバイナーではなくレデューサーとして集約を使用してこのコマンドを実行すると、ジョブは正常に機能します。

shell> hadoop jar hadoop-streaming.jar -file mapper.py -mapper mapper.py -reduce aggregate -reducer NONE -input input_files -output output_path

これは、集約クラスをコンバイナーとして使用できないということですか?

2) | は使用できません。一般的なオプションの区切りとして

これは、上記のリンクからのコマンドの例です

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
-input myInputDirs \
-output myOutputDir \
-mapper org.apache.hadoop.mapred.lib.IdentityMapper \
-reducer org.apache.hadoop.mapred.lib.IdentityReducer \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \
-D stream.map.output.field.separator=. \
-D stream.num.map.output.key.fields=4 \
-D map.output.key.field.separator=. \
-D mapred.text.key.partitioner.options=-k1,2\
-D mapred.reduce.tasks=12

| は使用できません。map.output.key.field.separator の引数として。エラーは

-D: command not found
11/08/03 10:48:02 ERROR streaming.StreamJob: Missing required options: input, output

(更新) | をエスケープする必要があります。このような\で

-D stream.map.output.field.separator=\|

3) 例のようにコマンドの最後に -D オプションを指定することはできません。エラーは

-D: command not found
11/08/03 10:50:23 ERROR streaming.StreamJob: Unrecognized option: -D

ドキュメントに欠陥がありますか、それとも何か間違っていますか?

私が間違っていることについての洞察は大歓迎です。thnx

4

1 に答える 1

0

この質問は 3 年前に尋ねられましたが、今日も -D オプションで問題が発生しているため、他の人が同じ問題を抱えている場合は少し情報を追加します。

Hadoopストリーミングのマニュアルによると:

bin/hadoop command [genericOptions] [commandOptions]

-D は一般的なオプションであるため、他のオプションの前に配置する必要があります。したがって、この場合、コマンドは次のようになります。

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
-D stream.map.output.field.separator=. \
-D stream.num.map.output.key.fields=4 \
-D map.output.key.field.separator=. \
-D mapred.text.key.partitioner.options=-k1,2\
-D mapred.reduce.tasks=12
-input myInputDirs \
-output myOutputDir \
-mapper org.apache.hadoop.mapred.lib.IdentityMapper \
-reducer org.apache.hadoop.mapred.lib.IdentityReducer \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \
于 2014-08-06T16:30:58.580 に答える