我对分布式计算比较陌生,所以请原谅我,如果我误解了这里的一些基本概念。我正在寻找一个(最好)基于Python的Hadoop替代方案,通过使用基于SGE的网格引擎(例如OpenGrid或Grid of Grid Engine)在集群上通过MapReduce处理大型数据集。我有幸用PythonGrid运行基本的分布式作业,但我真的很喜欢一个功能更丰富的框架来运行我的工作。我已经阅读过像Disco和MinceMeatPy这样的工具,这两种工具似乎都提供了真正的Map-Sort-Reduce工作处理,但它们似乎并没有明显支持SGE。这让我想知道是否可以使用网格调度程序实现真正的MapReduce功能,或者人们是否因为不经常使用它们而不支持开箱即用。你能在Grid Engine上执行Map-Sort-Reduce任务吗?他们的Python工具是否支持此功能?使用现有的MapReduce工具来使用SGE作业调度程序有多难?
答案 0 :(得分:2)
我听说Jug有效。它使用文件系统在并行任务之间进行协调。在那种框架中,你编写你的代码并在你正在运行的机器上运行“jug status primes.py”然后启动一个网格数组作业,你可以使用尽可能多的工作程序,所有运行“jug execute primes.py” ”
mincemeat.py应该能够以相同的方式运行,但看起来使用网络进行协调。这可能取决于您的节点是否可以与运行整个脚本的服务器通信。
有几个关于运行实际Hadoop MapReduce and HDFS on SGE的发行说明,但我找不到好的文档。
如果您已经习惯Hadoop streaming with Python,那么在SGE上复制并不算太糟糕。我在工作中取得了一些成功:我运行一个数组作业,为每个输入文件执行map + shuffle。然后是另一个对每个reducer数进行排序+减少的数组作业。 shuffle部分只是将文件写入网络目录,如mapper00000_reducer00000,mapper00000_reducer00001等(所有映射器和缩减器编号对)。然后reducer 00001将标记为reducer00001的所有文件排序在一起并管道到reducer代码。
不幸的是,Hadoop流媒体功能不是很全面。