hadoop上的并行图像处理



我有几个巨大的TIFF图像(60000x60000~60MB)。使用Hadoop,我想为每个图像创建一个分片金字塔(深度缩放格式),并将它们存储在HDFS上。理想情况下,我希望实现每个节点只处理图像的一部分。

实现这一目标的最佳方式是什么?在HDFS上存储小文件会是一个很大的开销吗?

您确定需要hadoop吗?你的图片没有那么大。我6岁的桌面可以在4分钟内对更大的图像进行深度缩放:

$ tiffinfo huge.tif
TIFF Directory at offset 0x12d095e4 (315659748)
  Image Width: 91460 Image Length: 51866
  Tile Width: 512 Tile Length: 512
  Resolution: 10, 10 pixels/cm
  Bits/Sample: 8
  Compression Scheme: JPEG
...
$ time vips dzsave huge.tif x
real  3m40.841s
user  4m57.587s
sys   0m50.375s

在HDFS上存储小文件会是一个很大的开销吗?

查看Cloudera的这篇文章。有了HDFS联盟,大量文件的问题会稍微缓解一些。

http://www.cloudera.com/blog/2009/02/the-small-files-problem/

实现这一目标的最佳方式是什么?

首先检查用于创建深度缩放格式的API是否可以应用于图像文件的一部分。如果必须一次处理完整的文件,那么Hadoop就没有什么优势了。HDFS默认情况下会将文件拆分为64MB的拆分,每个拆分都可以由映射器并行处理。

如果你是Hadoop的新手,看看Hadoop中的基本字数示例是如何工作的,并尝试为你的需求做一些类似的事情。

最新更新