0

我确实有很多图像文件并且需要将它们存储在 HDFS 中,为了避免小文件问题,我计划使用序列文件存储我的图像文件。

我的问题是我需要创建一个 MapReduce 程序,它只处理这些文件的选择,如果我只打算处理一些文件,我认为从 SequenceFile 读取所有图像内容不是一个好主意它们,还可以添加更多图像,如果我为每组图像创建一个新的 SequenceFile,我怎么知道哪个 SequenceFile 包含我需要处理的图像?万一我知道在输入映射器之前手动过滤图像会让人不知所措。

请指教。谢谢!

4

2 回答 2

0

您可以将图像文件与图像的任何其他属性一起存储在 HBase 中 - 您可能希望对其进行过滤/查询。这将允许您有选择地查询图像。

看到这个:
http ://apache-hbase.679495.n3.nabble.com/Storing-images-in-Hbase-td4036184.html
http://www.slideshare.net/jacque74/hug-hbase-presentation

于 2014-02-27T04:02:31.850 回答
0

如果您可以将文件存储在带有索引的MapFile中,则可以使用键查询某些文件。例如,SequenceFileMapFile.Reader

MapFile.Reader reader = MapFile.Reader(fs, dirName, conf);


public byte[] get(String filename) {
    TextWritable key = new TextWritable();
    BytesWritable value = new BytesWritable();
    if(reader.get(key,value) != null) {
        return value.copyBytes();
    }
    else {
        return null;
    }
}

如果您的文件是由MapReduce应用程序生成的,则可以使用MapFileOutputFormat来输出MapFile.

另外,由于您只需要处理几个文件,我认为您不需要MapReduce在这样的过程中。

于 2014-02-27T03:41:26.327 回答