我有一个需要在很多文件(1000's)上调用的函数。每个都独立于另一个,可以并行运行。每个文件的函数输出不需要与其他文件组合(当前)。我有很多服务器可以扩展,但我不知道该怎么做:
1)在其上运行MapReduce
2)创建1000个作业(每个作业都有不同的文件)。
一种解决方案会优于另一种吗?
谢谢!
答案 0 :(得分:6)
MapReduce将为分发大型数据集工作负载提供重要价值。在您的情况下,在小型独立数据文件上进行较小的独立工作,在我看来,这可能是过度的。
所以,我更喜欢运行一堆动态创建的批处理文件。
或者,或者使用集群管理器和作业调度程序,例如 SLURM https://computing.llnl.gov/linux/slurm/
SLURM:高度可扩展的资源管理器
SLURM是专为Linux集群设计的开源资源管理器 各种尺寸。它提供三个关键功能。首先它分配 对资源(计算机节点)的独占和/或非独占访问 用户可以在一段时间内完成工作。第二,它 提供了启动,执行和监控工作的框架 (通常是并行作业)在一组分配的节点上。最后,它 通过管理待处理队列来仲裁资源争用 工作
答案 1 :(得分:2)
由于它只有1000个文件(而不是1000000000个文件),因此完全成熟的HADOOP设置可能有点过分。 GNU Parallel尝试填补顺序脚本和HADOOP之间的空白:
ls files | parallel -S server1,server2 your_processing {} '>' out{}
您可能想了解--sshloginfile
。根据文件的存储位置,您可能也想学习--trc
。
观看介绍视频以了解详情:http://www.youtube.com/watch?v=OpaiGYxkSuQ