5

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

让我们假设两种情况:

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

我想对图像做 4 件事:

  1. 我需要将一些函数 fnc() 分别应用于每个图像。
  2. 我需要不时(每天 1000 次)从 HDFS 中提取特定图像并将其显示在网站上。这些是针对特定图像的用户查询,因此延迟应该是几秒钟
  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 有数十亿的图像记录,这是一个很好的阅读链接。虽然如果有人知道任何基准测试会很棒。

4

2 回答 2

4

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

于 2013-07-07T04:47:50.377 回答
2

面临此类问题的人应该看看http://blog.cloudera.com/blog/2009/02/the-small-files-problem/

于 2013-10-18T15:26:24.807 回答