Perl 分布式并行计算

use*_*555 2 parallel-processing perl perl-module distributed-computing

我想知道是否有任何 perl 模块可用于启用类似于 apache hadoop 的分布式并行计算。

例如,当提交到客户端节点时,将在许多计算机上并行执行的 perl 脚本。

Mar*_*Roy 5

我是《Many-core Engine for Perl》的作者。

在接下来的几个周末,我将使用MCE与Gearman::XS进行测试。MCE 擅长最大化给定节点上的可用内核。Gearman擅长作业分配,并且包含负载均衡等很多功能。将两者结合在一起是我在多个节点上水平扩展 MCE 的想法。:) 直到现在我才与任何人分享这个消息。

为什么这两个模块很合适(我的拙见):

  1. 对于分发,需要某种分块引擎。MCE 是一个分块引擎——因此分解输入对于 MCE 来说是很自然的事情。本质上,MCE 可以在作业提交主机和工作节点上使用,以最大化可用核心。

  2. 对于工作节点,MCE 在处理输入数据时遵循银行排队模型。这有助于保证所有 CPU 从作业开始到结束都保持忙碌状态。当工人闲下来时,剩下的“工作”正在处理他们的最后一块。

一个人的想象力是有限的——这两个模块一起工作有很多可能性。在写MCE的时候,我首先关注的是节点端。接下来显然是工作分配,我进行了搜索并发现了 Gearman::XS。这两个模块可以愉快地组合在一起:)一旦在节点上(较小的块),作业分配端(较大的块)。所有网络事务均由 Gearman 处理。

基本上,当 Gearman::XS 已经相当不错时,我就没有必要编写工作分配方面的内容了。这一直是我的计划。我很快就会写有关 Gearman::XS + MCE 的文章。

顺便说一句:我想人们可以使用 GRID-Machine + MCE 做类似的事情。MCE 的优点在于最大化任何给定节点上的所有可用核心。

MCE 的另一个神奇之处在于,例如,人们可能不希望 200 个节点 * 16 个工作线程全部从 NFS 服务器读取/写入。这将对 NFS 服务器产生很大影响。顺便说一句:RHEL 6.4 将包括 pNFS(并行 NFS)。使用 MCE,工作人员可以调用“do”方法来序列化 NFS 的写入/读取。因此,攻击 NFS 的次数不再是 200 * 16 = 3200,而是在任何给定时间针对 NFS 服务器的最大请求数仅为 200 个(每个物理节点 1 个)。

在编写MCE时,grace可以应用于很多场景。我需要向 MCE 的主页MCE(位于 code.google.com )添加更多 wiki 。此外,MCE 早餐吃的日志文件非常大:) 查看示例目录下的egrep.pl 和wc.pl。它甚至通过顺序 IO(在许多工作人员中强大的 slurp IO)击败了 Wide Finder 项目。

查看MCE 发行版中包含的图像。哦,别忘了也查看Gearman 的主要网站。

这之后还剩下什么?嗯,网络作品。我想到的一个想法是使用Mojo。有很多选择。这只是其中之一:

Gearman::XS + MCE + Mojolicious

同样,如果想通过 SSH 进行通信,可以使用 GRID-Machine 而不是 Gearman::XS。

不管怎样,我的计划是使用一个已经可用的工作分配模块。对于 MCE,我的重点是最大限度地提高单个节点的性能 - 包括分块、序列化、组排队模型、用户任务(允许多个角色)、工作人员之间的编号排序以及顺序 slurp IO。

——马里奥