web-dev-qa-db-ja.com

画像/ビデオをHadoopHDFSに保存する

いくつかのビデオ/画像をHadoopに保存したい [〜#〜] hdfs [〜#〜] ですが、HDFSはテキストのようなファイルのみを受け入れると聞きました。

確かに、ビデオ/画像をHDFSに保存できますか?はいの場合、それを行うための方法または手順は何ですか?

10
devosJava

何もしなくても絶対に可能です。 Hadoopは、バイナリファイルを読み書きする機能を提供します。したがって、実質的にバイトに変換できるものはすべてHDFSに保存できます(画像、ビデオなど)。これを行うために、Hadoopは SequenceFiles と呼ばれるものを提供します。 SequenceFileは、バイナリのキーと値のペアで構成されるフラットファイルです。 SequenceFileは、書き込み、読み取り、および並べ替えのために、それぞれWriter、Reader、およびSorterクラスを提供します。したがって、画像/ビデオファイルをSeuenceFileに変換し、HDFSに保存することができます。これは、画像ファイルを取得してSequenceFileに変換する小さなコードです。ここで、ファイルの名前がキーで、画像の内容が値です。

public class ImageToSeq {
    public static void main(String args[]) throws Exception {

        Configuration confHadoop = new Configuration();     
        confHadoop.addResource(new Path("/hadoop/projects/hadoop-1.0.4/conf/core-site.xml"));
        confHadoop.addResource(new Path("/hadoop/projects/hadoop-1.0.4/conf/hdfs-site.xml"));   
        FileSystem fs = FileSystem.get(confHadoop);
        Path inPath = new Path("/mapin/1.png");
        Path outPath = new Path("/mapin/11.png");
        FSDataInputStream in = null;
        Text key = new Text();
        BytesWritable value = new BytesWritable();
        SequenceFile.Writer writer = null;
        try{
            in = fs.open(inPath);
            byte buffer[] = new byte[in.available()];
            in.read(buffer);
            writer = SequenceFile.createWriter(fs, confHadoop, outPath, key.getClass(),value.getClass());
            writer.append(new Text(inPath.getName()), new BytesWritable(buffer));
        }catch (Exception e) {
            System.out.println("Exception MESSAGES = "+e.getMessage());
        }
        finally {
            IOUtils.closeStream(writer);
            System.out.println("last line of the code....!!!!!!!!!!");
        }
    }
}

また、ファイルをそのままダンプすることを意図している場合は、次のようにすることができます。

bin/hadoop fs -put /src_image_file /dst_image_file

また、ファイルを保存するだけではない場合は、 [〜#〜] hipi [〜#〜] が役立つ場合があります。 HIPIは、分散コンピューティング環境で画像処理タスクを実行するためのAPIを提供するHadoopのMapReduceフレームワーク用のライブラリです。

HTH

19
Tariq

画像とビデオをHDFSに保存することは完全に可能ですが、独自のカスタムを使用/作成する必要がある可能性があります InputFormatOutputFormat =および RecordReader それらを適切に分割するため。

しかし、他の人も同様のプロジェクトに取り組んでいると思います。ネットを調べてみると、誰かがすでにカスタムクラスを作成して、必要なことを正確に実行していることがわかるかもしれません。

2
Quetzalcoatl