私はHadoopを初めて使用し、次のことを行う方法を見つけようとしています。
- 複数の入力画像ファイルがあります。
- これらのファイルを処理するバイナリ実行可能ファイルがあります。
- これらのバイナリ実行可能ファイルは、出力としてテキストファイルを書き込みます。
- これらの実行可能ファイルをすべて含むフォルダーがあります。
- これらの実行可能ファイルをすべて特定の順序で実行し、画像の場所を引数として渡すスクリプトがあります。
私の質問はこれです:Hadoopストリーミングを使用して、これらのバイナリを介してこれらの画像を処理し、テキストファイルから結果を吐き出すことができますか?
私は現在これを試しています。
Hadoopクラスターを実行しています。バイナリと画像をHDFSにアップロードしました。
Hadoopを実行すると、ディレクトリを画像のあるフォルダに変更し、バイナリを実行する別のスクリプトを実行するスクリプトを設定しました。
次に、結果のstdoutを介してスクリプトが吐き出されます。
ただし、マップスクリプトをHDFSのイメージフォルダーに変更してから、他のスクリプトを実行する方法がわかりません。
誰かが私にヒントを与えることができますか?
sudo ./hadoop/bin/hadoop jar ../hduser/hadoop/contrib/streaming/hadoop-streaming-1.1.0.jar \
-numReduceTasks 0 \
-file /home/hduser/RunHadoopJob.sh \
-input /user/hduser/7posLarge \
-output /user/hduser/output5 \
-mapper RunHadoopJob.sh \
-verbose
そして私のRunHadoopJob.sh:
#!/bin/bash
cd /user/hduser/7posLarge/;
/user/hduser/RunSFM/RunSFM.sh;
私のHDFSは次のようになります。
hadoop fs -ls
Warning: $HADOOP_HOME is deprecated.
Found 4 items
drwxr-xr-x - hduser supergroup 0 2012-11-28 17:32 /user/hduser/7posLarge
drwxr-xr-x - hduser supergroup 0 2012-11-28 17:39 /user/hduser/RunSFM
drwxr-xr-x - root supergroup 0 2012-11-30 14:32 /user/hduser/output5
私はこれがMapReduceの標準的な使用法ではないことを知っています。オーバーヘッドをあまり書かずに、同じプログラムの異なるクラスターで異なる入力を使用して複数のジョブをスピンアップすることなく、簡単に実行できる方法を探しています。これは、 Hadoopストリーミングのドキュメントを見ると可能であるようです。
「Hadoopストリーミングを使用して、(半)独立したタスクの任意のセットを実行するにはどうすればよいですか?
多くの場合、Map Reduceの全機能は必要ありませんが、同じプログラムの複数のインスタンスを実行する必要があるだけです。データの異なる部分、または同じデータで、異なるパラメーターを使用します。これを行うには、Hadoopストリーミングを使用できます。「」
これが不可能な場合、たとえばAmazonAWSにこれを実行できる別のツールはありますか?