0

Hadoop と mapreduce の新しいユーザーです。画像を測定するための mapreduce ジョブを作成したいと思います。これが、mapreduce への入力として画像を渡すことができるかどうかを知りたい理由です。どんな例でも

ありがとう

4

2 に答える 2

0

いいえ、MapReduce ジョブはネットワーク シリアル化用に最適化された特定のタイプのデータ型を使用するため、画像を直接 MapReduce ジョブに渡すことはできません。私は画像処理の専門家ではありませんが、HIPIフレームワークを確認することをお勧めします。MapReduce フレームワーク上で便利な方法で画像処理を行うことができます。

または、本当にネイティブの Hadoop の方法で実行したい場合は、最初に画像ファイルをHadoop シーケンス ファイルに変換し、次に SequenceFileInputFormat を使用してファイルを処理することでこれを行うことができます。

于 2013-05-03T22:44:11.193 に答える
0

はい、完全にできます。

提供される情報が限られているため、非常に一般的な回答しかできません。

いずれにせよ、次のことを行う必要があります: 1) HDFS の場所にあるファイルのチャンクを取得する代わりに (TextInputFormat や SequenceFileInputFormat が行うように) カスタムの InputFormat を作成する必要があります。実際には各マップ タスクに画像の HDFS パス名を渡します。そこから画像を読み取るのはそれほど難しくありません。

イメージがフレームワークを介して渡される Reduce フェーズを計画している場合は、次のことを行う必要があります。 )。write() メソッドで、イメージをバイト配列にシリアル化する必要があります。これを行うとき、私が最初に行うことは、書き込む配列のサイズである int/long を出力に書き込むことです。最後に、配列をバイトとして書きたいと思うでしょう。

read() メソッドでは、最初に int/long を読み取り (画像のペイロードを記述します)、このサイズのバイト配列を作成してから、バイト配列にバイトを完全に読み取ります。キャプチャした int/long。

あなたが何をしているのか完全にはわかりませんが、それが私のやり方です。

于 2013-05-03T23:53:09.743 に答える