我确实有很多图像文件并且需要将它们存储在 HDFS 中,为了避免小文件问题,我计划使用序列文件存储我的图像文件。
我的问题是我需要创建一个 MapReduce 程序,它只处理这些文件的选择,如果我只打算处理一些文件,我认为从 SequenceFile 读取所有图像内容不是一个好主意它们,还可以添加更多图像,如果我为每组图像创建一个新的 SequenceFile,我怎么知道哪个 SequenceFile 包含我需要处理的图像?万一我知道在输入映射器之前手动过滤图像会让人不知所措。
请指教。谢谢!
我确实有很多图像文件并且需要将它们存储在 HDFS 中,为了避免小文件问题,我计划使用序列文件存储我的图像文件。
我的问题是我需要创建一个 MapReduce 程序,它只处理这些文件的选择,如果我只打算处理一些文件,我认为从 SequenceFile 读取所有图像内容不是一个好主意它们,还可以添加更多图像,如果我为每组图像创建一个新的 SequenceFile,我怎么知道哪个 SequenceFile 包含我需要处理的图像?万一我知道在输入映射器之前手动过滤图像会让人不知所措。
请指教。谢谢!
您可以将图像文件与图像的任何其他属性一起存储在 HBase 中 - 您可能希望对其进行过滤/查询。这将允许您有选择地查询图像。
看到这个:
http ://apache-hbase.679495.n3.nabble.com/Storing-images-in-Hbase-td4036184.html
http://www.slideshare.net/jacque74/hug-hbase-presentation
如果您可以将文件存储在带有索引的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在这样的过程中。