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