我有几个巨大的 TIFF 图像(60,000x60,000 ~600MB)。使用 Hadoop,我想为每个图像创建一个瓷砖金字塔(deepzoom 格式)并将它们存储在 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 federation,大量文件的问题会有所缓解。
http://www.cloudera.com/blog/2009/02/the-small-files-problem/
实现它的最佳方法是什么?
首先检查创建深度缩放格式的API是否可以应用于图像文件的一部分。如果必须一次处理完整的文件,那么 Hadoop 提供的优势并不大。默认情况下,HDFS 将文件拆分为 64 MB 的拆分,每个拆分都可以由映射器并行处理。
如果您是 Hadoop 新手,请查看基本字数统计示例在 Hadoop 中的工作原理,并尝试根据您的要求做一些类似的事情。