我有大量图像文件需要在 HDFS 上存储和处理
让我们假设两种情况:
- 图片小于 5MB
- 图像范围从 50KB 到 20MB
我想对图像做 4 件事:
- 我需要将一些函数 fnc() 分别应用于每个图像。
- 我需要不时(每天 1000 次)从 HDFS 中提取特定图像并将其显示在网站上。这些是针对特定图像的用户查询,因此延迟应该是几秒钟。
- 每年必须删除一次图像组。
- 新图像将添加到系统中(每天 1000 张新图像)
解决方案设计 IMO 应考虑:
- 小文件问题:
- MR处理
- 快速访问文件
- 快速写入新文件并不是什么大问题,因为图像不会立即使用。几分钟或几小时的延迟是可以的。
我的第一个想法是聚合图像以解决满足 1 和 2 的小文件问题。但我留下了快速随机访问图像问题和添加新图像的问题。我不确定我该如何处理。
我查看了 sequenceFiles、HAR、mapFiles、combineFileInputFormat、Avro,但找不到 (3) 和 (4) 的解决方案。因为我必须负责索引块的内容,所以搜索、删除或添加新文件可能会变得很棘手。
另一种方法是使用 HBase 或 HCatalog 来存储图像,这将处理 (1) (2) (3) 和 (4),但代价是什么?我知道随着图像数量的增加,将二进制 BLOBS 存储在数据库中并不是很有效,但我认为 HBase 或 HCatalog 处理这个有点不同。
感谢所有的帮助!
编辑:
我刚刚在 HBase 上找到了这个用于提供图像的线程,显然 Yfrog 和 ImageShack 有数十亿的图像记录,这是一个很好的阅读链接。虽然如果有人知道任何基准测试会很棒。