jzi*_*011 4 bash hadoop imagemagick amazon-web-services elastic-map-reduce
我有一个项目要求我处理大量(1000-10000)的大(100MB到500MB)图像.我正在进行的处理可以通过Imagemagick完成,但我希望在Amazon的Elastic MapReduce平台(我相信使用Hadoop运行)上实际进行此处理.
在我发现的所有示例中,它们都处理基于文本的输入(我发现Word Count样本数十亿次).我找不到任何与Hadoop有关的工作:从一组文件开始,对每个文件执行相同的操作,然后将新文件的输出写出来作为它自己的文件.
我很确定这可以通过这个平台完成,并且应该能够使用Bash完成; 我不认为我需要去创建一个完整的Java应用程序或其他东西,但我可能是错的.
我不是要求有人给我代码,但如果有人有示例代码或链接到处理类似问题的教程,我将不胜感激......
您的任务有几个问题.
正如您所见,Hadoop本身并不处理图像.但是您可以将所有文件名和路径导出为文本文件,并在其上调用一些Map函数.所以在本地磁盘上的文件上调用ImageMagick应该不是很多.
但是你如何处理数据的位置?
您无法在HDFS中的文件上运行ImageMagick(仅Java API和FUSE安装不稳定),您无法预测任务调度.因此,例如,可以将映射任务调度到图像不存在的主机.
当然,您只需使用一台机器和一项任务即可.但是你没有改进.然后你就会有一大堆开销.
从Java任务中弹出时也存在内存问题.我发了一篇关于它的博客文章[1].
and should be able to be done using Bash
Run Code Online (Sandbox Code Playgroud)
这是下一个问题,你必须至少编写地图任务.您需要ProcessBuilder使用特定路径和功能调用ImageMagick.
我找不到任何与Hadoop有关的工作:从一组文件开始,对每个文件执行相同的操作,然后将新文件的输出写出来作为它自己的文件.
猜猜为什么?:D Hadoop不适合这项任务.
所以基本上我建议手动将图像分割到EC2中的多个主机并在其上运行bash脚本.压力更小,速度更快.要在同一主机上进行并行化,请将文件拆分为每个核心的多个文件夹,然后在其上运行bash脚本.这应该很好地利用你的机器,并且比Hadoop更好.
[1] http://codingwiththomas.blogspot.com/2011/07/dealing-with-outofmemoryerror-in-hadoop.html
| 归档时间: |
|
| 查看次数: |
4429 次 |
| 最近记录: |