2

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

例如,当提交到客户端节点时,要在多台机器上并行执行的 perl 脚本。

4

4 回答 4

4

我是 Perl 多核引擎的作者。

在接下来的几个周末,我将带着MCEGearman::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 可以应用于很多场景。我需要在 code.google.com的 MCE 主页 MCE 中添加更多 wiki 。此外,MCE 会在早餐时吃掉非常大的日志文件 :) 查看示例目录下的 egrep.pl 和 wc.pl。它甚至通过顺序 IO(在许多工作人员中强大的 slurp IO)击败了广泛的 finder 项目。

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

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

Gearman::XS + MCE + Mojolicious

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

无论如何,这是我使用已经可用的工作分配模块的计划。对于 MCE,我的重点是最大化单个节点上的性能——包括分块、序列化、银行排队模型、用户任务(允许多个角色)、工作人员之间的编号排序和顺序 slurp IO。

——马里奥

于 2013-02-27T04:59:35.633 回答
1

您可能会研究像ZeroMQ这样简单的消息队列。我确信CPAN 搜索可以帮助您提供一些其他建议。

最近有一些关于 Many Core Engine MCE模块的讨论,您可能想研究一下,我不确定它是否可以让您在主机上并行化,但似乎不会迈出很大的一步鉴于其既定目的。

于 2013-02-15T14:26:04.000 回答
0

Argon可能会提供您正在寻找的东西(免责声明 - 我是作者)。它允许您建立一个任意的工作人员网络,每个工作人员运行一个进程池(使用Coro::ProcessPool)。

创建任务非常简单:

use Argon::Client;

my $client = Argon::Client->new(host => "somehost", port => 8000);
my $result = $client->queue(sub {
    use My::Work::Module qw(do_work);
    my $task_id = shift;
    do_work($task_id);
});
于 2014-02-28T16:30:42.020 回答
0

CPAN 上的GRID模块专为使用分布式计算而设计。

https://metacpan.org/pod/distribution/GRID-Machine/lib/GRID/Machine/perlparintro.pod

于 2013-06-10T17:10:09.600 回答