我对分布式计算比较陌生,所以如果我误解了这里的一些基本概念,请原谅我。我正在寻找(最好)基于 Python 的 Hadoop 替代方案,以便使用基于 SGE 的网格引擎(例如 OpenGrid 或 Sun of Grid Engine)在集群上通过 MapReduce 处理大型数据集。我很幸运地使用 PythonGrid 运行基本的分布式作业,但我真的想要一个功能更丰富的框架来运行我的作业。我已经阅读了像 Disco 这样的工具和 MinceMeatPy ,两者似乎都提供真正的 Map-Sort-Reduce 作业处理,但它们似乎对 SGE 没有任何明显的支持。这让我想知道是否有可能使用网格调度程序实现真正的 MapReduce 功能,或者人们是否只是不支持开箱即用,因为它们不经常使用。您可以在网格引擎上执行 Map-Sort-Reduce 任务吗?他们的 Python 工具支持这个吗?装配现有的 MapReduce 工具以使用 SGE 作业调度程序会有多困难?
请您参考如下方法:
我听说过 Jug作品。它使用文件系统来协调并行任务。在那种框架中,您将编写代码并在您所在的机器上运行“jug status primes.py”,然后启动一个网格阵列作业,其中包含任意数量的 worker ,所有 worker 都在运行“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 等等(所有成对的 mapper 和 reducer 编号)。然后 reducer 00001 将所有标记为 reducer00001 的文件排序在一起,并通过管道传输到 reducer 代码。
不幸的是,Hadoop 流式处理功能不是很全。
