我有很多图像文件,需要将它们存储在HDFS中,为了避免小文件问题,我打算使用序列文件存储我的图像文件。
我的问题是我需要创建一个MapReduce程序,只处理这些文件的选择,如果我只打算处理,我认为从SequenceFile中读取所有图像内容并不是一个好主意。其中一些,也可以添加更多图像,如果我为每一组图像创建一个新的SequenceFile,我怎么知道哪个SequenceFile包含我需要处理的图像?如果我知道在输入映射器之前手动过滤图像会很难。
请指教。谢谢!
答案 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