用于大型图像处理的hadoop

zlhcx6iw  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(306)

我有一个50tb的~1gb tiff图像集,我需要在上面运行相同的算法。目前,我用c++编写了校正过程,效果很好,但是要在所有这些图像上连续运行将需要很长时间。我知道mapreduce/spark的实现可以工作,但我似乎不知道如何使用图像输入/输出。
我看到的每个教程/示例都使用纯文本。理论上,我也希望使用amazonweb服务。如果有人能给我指点方向,那就太好了。我显然不是在寻找一个完整的解决方案,但也许有人已经成功地实现了接近这一点的东西?提前谢谢。

vsnjm48y

vsnjm48y1#

你的数据是hdfs格式的吗?您希望从hadoop/spark中得到什么?在我看来,你所需要的只是一个文件名队列和一堆要执行的机器。
您可以将应用程序打包到aws lambda中(请参阅在aws lambda中运行任意可执行文件)并为每个文件触发事件。你可以将你的应用程序打包到一个docker容器中,在ecs中启动一堆应用程序,将它们放在一个文件名队列(或者url或者s3 bucket)中进行处理。
我认为hadoop/spark有点过头了,特别是因为它们在处理1gb的拆分作为输入方面非常糟糕,而且您的处理不是m/r(没有要合并的reducer的键值)。如果必须的话,您可以打包您的c++应用程序来读取stdin并使用hadoop流。
归根结底,问题是:50tb的数据存储在哪里,格式是什么?解决方案在很大程度上取决于答案,因为您希望将计算机带到数据所在的位置,并避免将50tb传输到aws,甚至上载到hdfs。

4szc88ey

4szc88ey2#

您有50 TB的~1gb大型.tif文件。
您希望在每个文件上运行相同的算法。
在mapreduce范例中解决问题的一个方面,大多数开发人员都没有意识到:
如果在数据节点上进行复杂的计算,系统将陷入瘫痪。
您看到的大多数基于文本的简单示例的一个重要原因是,它们实际上是可以在商业级硬件上运行的问题。如果你不知道或忘记了,我想指出:
mapreduce编程范式是用于运行需要向外扩展或向上扩展的作业。
一些提示:
在数据如此庞大的情况下,有必要在数据所在的位置进行计算,而不是将数据带入计算。
在商业级硬件上运行这项工作显然是个坏主意。你需要多核的机器-可能是16/32。
在购买了所需的硬件之后,您应该优化软件,以便在必要/有用的地方并行化算法。
你的问题肯定是一个可以受益于扩大。对于大文件和这些类型文件的大集合,增加ram和使用更快的处理器无疑是明智的做法。
最后,如果您想接收输入,可以将图像作为二进制文件读取。这将限制您使用.tif格式的能力,并且您可能需要修改处理算法。

相关问题