2011-07-12 162 views
3

我有一个功能需要在很多文件(1000's)上调用。每个都独立于另一个,并且可以并行运行。每个文件的功能输出不需要与其他文件合并(当前)。我有很多的服务器,我可以扩展这个的,但我不知道该怎么做:MapReduce或批处理作业?

1)在其上运行MapReduce的

2)创建1000个就业机会的(每个人都有它的工作原理不同的文件上)。

一种解决方案会比另一种解决方案更可取吗?

谢谢!

回答

6

MapReduce将为分布大型数据集工作负载提供重要价值。在你的情况下,在小型独立数据文件上做小型独立工作,在我看来这可能是矫枉过正的。

所以,我宁愿运行一堆动态创建的批处理文件。

,或者,使用群集管理器和作业调度,如SLURMhttps://computing.llnl.gov/linux/slurm/

SLURM:一个高度可扩展资源管理器

SLURM是专为一个开源的资源管理器所有大小的Linux集群 。它提供了三个关键功能。首先它将 分配给 用户的资源(计算机节点)独占和/或非独占访问一段时间,以便他们可以执行工作。其次,它提供了一个框架,用于在一组分配的节点上启动,执行和监视工作 (通常是并行作业)。最后,它通过管理待处理的 工作队列来仲裁资源争用。

+2

+1。一般来说,你想要做的最简单的事情,将适合你的问题。 @PA指出,设置mapreduce来完成独立文件中可以使用独立脚本完成的事情是过度的。话虽如此,如果你知道你想学习MapReduce出于其他原因,并且想用这个更简单的问题作为出发点,那就去做吧。但我不会在这种情况下推荐它。 –

2

因为它只有1000个文件(而不是1000000000个文件),所以完整的HADOOP设置可能是矫枉过正的。 GNU并行试图填补顺序脚本和Hadoop之间的差距:

ls files | parallel -S server1,server2 your_processing {} '>' out{} 

你可能会想了解--sshloginfile。根据文件的存储位置,您也可能想学习--trc

观看介绍视频了解更多:http://www.youtube.com/watch?v=OpaiGYxkSuQ