MapReduce或批处理作业



我有一个需要在很多文件(1000个)上调用的函数。每一个都是独立的,并且可以并行运行。每个文件的函数输出不需要(目前)与其他文件组合在一起。我有很多服务器可以扩展,但我不确定该怎么做:

1)运行MapReduce

2)创建1000个作业(每个作业都有一个不同的文件)。

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

谢谢!

MapReduce将为分布大型数据集工作负载提供重要价值。在您的情况下,在较小的独立数据文件上进行较小的独立作业,在我看来这可能是多余的。

所以,我更喜欢运行一堆动态创建的批处理文件。

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

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

SLURM是一个为Linux集群设计的开源资源管理器各种尺寸的。它提供了三个关键功能。首先它分配对资源(计算机节点)的独占和/或非独占访问允许用户使用一段时间,以便他们可以执行工作。第二,它提供用于启动、执行和监视工作的框架(通常是并行作业)在一组分配的节点上。最后,它通过管理挂起队列来仲裁资源争用工作。

因为它只有1000个文件(而不是1000000000个文件),一个完整的HADOOP设置可能是多余的。GNU Parallel试图填补顺序脚本和HADOOP之间的空白:

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

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

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

在slurm中使用作业数组。不需要提交上千份工作…只有1 -数组作业。

这将在您指定的资源可用的尽可能多的节点/核心上启动相同的程序。最终,它将在所有这些国家中大行其道。您唯一的问题是如何将数组索引映射到要处理的文件。最简单的方法是准备一个包含所有路径的文本文件,每行一个。作业数组的每个元素将获得该文件的第i行,并将其用作要处理的文件的路径。

相关内容

  • 没有找到相关文章

最新更新