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

时间:2013-07-06 18:18:59

标签: image hadoop mapreduce hbase random-access

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

我们假设有两种情况:

  1. 图片小于5MB
  2. 图片范围从50KB到20MB
  3. 我想用图片做4件事:

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

      1. 小文件问题:
      2. MR Processing
      3. 快速访问文件
      4. 快速写入新文件不是一个大问题,因为图像不会立即使用。延迟几分钟或几小时就可以了。
      5. 我的第一个想法是聚合图像来处理小文件问题,它满足1和2. 但我留下了快速随机访问图像问题和添加新图像。我不知道如何处理这个

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

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

        感谢您的帮助!

        修改

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

2 个答案:

答案 0 :(得分:3)

恕我直言,在hbase中直接存储大小约为10MB的图像没有问题。更大的文件可以存储在HDFS本身,并在hbase中有一个指针。即使您有数百万个此类文件,这也可以更快地访问。 MR与hbase和HDFS完美配合。

答案 1 :(得分:2)