我有大量的图像文件需要在hdfs上存储和处理
假设两种情况:
图像小于5mb
图像范围从50kb到20mb
我想对这些图像做4件事:
我需要对每个图像分别应用一些函数fnc()。
我需要提取一个特定的图像从hdfs不时(1000次/天),并显示在一个网站上。这些是针对特定图像的用户查询,因此延迟应该是几秒钟。
每年都有一组图片被删除。
新图像将添加到系统中(1000个新图像/天)
imo的解决方案设计应考虑:
小文件问题:
mr处理
快速访问文件
快速写入新文件不是什么大问题,因为图像不会立即使用。延迟几分钟或几个小时是可以的。
我的第一个想法是聚合图像以处理小文件问题,这满足了1和2的要求。但我只剩下快速随机访问图像的问题和新图像的添加。我不知道该怎么办。
我查看了sequencefiles、har、mapfiles、combinefileinputformat、avro,但没有找到(3)和(4)的解决方案。因为我将不得不照顾索引块的内容和搜索,删除或添加新的文件可能会变得棘手。
另一种方法是使用hbase或hcatalog来存储图像,这样可以处理(1)(2)(3)和(4),但代价是什么?我知道在数据库中存储二进制blob不是很有效,特别是随着图像数量的增加,但我认为hbase或hcatalog处理这个问题的方式可能有点不同。
谢谢你的帮助!
编辑:
我刚刚在hbase上找到了这个提供图片的线程,显然yfrog和imageshack有数以十亿计的图片记录,这是一个很好的链接。虽然如果有人知道任何基准,那将是伟大的。
2条答案
按热度按时间xghobddn1#
我的意思是,直接在hbase中存储~10mb大小的图像没有问题。更大的文件可以通过hbase中的指针存储在hdfs中。这将允许更快的访问,即使你有数百万这样的文件。mr在hbase和hdfs中都能很好地工作。
8ftvxx2r2#
面对这种问题的人应该看看http://blog.cloudera.com/blog/2009/02/the-small-files-problem/