如果我将所有图像存储在SequenceFile中,我如何设计mapper来处理它们的选择?

时间:2014-02-27 01:15:34

标签: hadoop hdfs sequencefile

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

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

请指教。谢谢!

2 个答案:

答案 0 :(得分:0)

如果您可以将文件存储在MapFile SequenceFile的索引中,则可以使用MapFile.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

答案 1 :(得分:0)

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

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