将图像存储在HBASE中进行处理和快速访问

san*_*ers 5 hadoop hbase mapreduce image random-access

我有大量的图像文件需要在HDFS上存储和处理

我们假设有两种情况:

  1. 图像小于5MB
  2. 图像范围从50KB到20MB

我想用图像做4件事:

  1. 我需要独立地为每个图像应用一些函数fnc().
  2. 我需要不时从HDFS中提取特定图像(1000次/天)并将其显示在网站上.这些是特定图像的用户查询,因此延迟应该是几秒钟.
  3. 每年一次必须删除一组图像.
  4. 新图像将添加到系统中(每天1000张新图像)

解决方案设计IMO应考虑:

  1. 小文件问题:
  2. MR处理
  3. 快速访问文件
  4. 快速写入新文件不是一个大问题,因为图像不会立即使用.延迟几分钟或几小时就可以了.

我的第一个想法是聚合图像以处理小文件问题,满足1和2. 但我留下了快速随机访问图像问题和添加新图像.我不知道如何处理这件事.

我查看了sequenceFiles,HAR,mapFiles,combineFileInputFormat,Avro,但无法找到(3)和(4)的解决方案.因为我必须负责索引块的内容,搜索和删除或添加新文件可能会变得棘手.

另一种方法是使用HBase或HCatalog来存储图像,这将照顾(1)(2)(3)和(4),但代价是什么?我知道在数据库中存储二进制BLOBS并不是非常有效,特别是随着图像数量的增加,但我认为可能HBase或HCatalog处理这个有点不同.

感谢您的帮助!

编辑:

我刚刚在HBase上发现这个线程用于提供图像,显然Yfrog和ImageShack有数十亿条带有图像的记录,这是一个很好的阅读链接.虽然如果有人知道任何基准会很棒.

Tar*_*riq 4

恕我直言,将~10MB大小的图像直接存储在hbase中是没有问题的。更大的文件可以通过 hbase 中的指针存储在 HDFS 本​​身中。即使您有数百万个此类文件,这也可以实现更快的访问。MR 与 hbase 和 HDFS 都能完美配合。