(またはより一般的なhadoop fs -text
)あなたはちょうど2つを持っている場合は可能かもしれません:あなたは(少し脳死である)のSunOSにしていることを考えると、これを試してください1 GBファイル。 100ファイルについては、streaming-apiを使用します。なぜなら、本格的なmapreduceジョブに頼ることなく、アドホッククエリに使用できるからです。例えば。 java.io.IOException: Stream closed
例外を避けるために、あなたが入力全体を読む必要が
#!/bin/bash
grep -q $1 && echo $mapreduce_map_input_file
cat >/dev/null # ignore the rest
注:お使いの場合には、スクリプトget_filename_for_pattern.sh
を作成します。
その後のコマンドに新しいディストリビューションmapred streaming
代わりのhadoop jar $HADOOP_HOME/hadoop-streaming.jar
動作するはずで
hadoop jar $HADOOP_HOME/hadoop-streaming.jar\
-Dstream.non.zero.exit.is.failure=false\
-files get_filename_for_pattern.sh\
-numReduceTasks 1\
-mapper "get_filename_for_pattern.sh bcd4bc3e1380a56108f486a4fffbc8dc"\
-reducer "uniq"\
-input /apps/hdmi-technology/b_dps/real-time/*\
-output /tmp/files_matching_bcd4bc3e1380a56108f486a4fffbc8dc
hadoop fs -cat /tmp/files_matching_bcd4bc3e1380a56108f486a4fffbc8dc/*
を発行します。後者の場合は、jarを見つけるために(または完全なパスを直接提供するために)$HADOOP_HOME
を正しく設定する必要があります。
クエリを簡単にするには、スクリプトは必要ありませんが、-mapper
パラメータに直接コマンドを入力するだけです。しかし、何かやや複雑なものであれば、スクリプトを使うことをお勧めします。なぜなら、エスケープする権利を得ることは雑用になる可能性があるからです。
還元フェーズが不要な場合は、それぞれの-reduce
オプションにシンボリックなNONE
パラメータを指定してください(または-numReduceTasks 0
を使用してください)。しかし、あなたのケースでは、アウトプットを単一のファイルに統合するためにフェーズを減らすと便利です。
GrepまたはSed? いいえ? – plast1K
これは、この 'bash-3のようにしようとすると、UNIXファイルシステムではなく、Hadoopファイルシステムであるという問題です。00 cd/apps/hdmi-technology/b_dps /リアルタイム bash:cd:/ apps/hdmi-technology/b_dps/real-time:このようなファイルやディレクトリはありません。ですから、私はこの問題に取り組むには他の方法が必要です。 – ferhan