我想知道是否有任何 perl 模块可用于启用类似于 apache hadoop 的分布式并行计算。
例如,当提交到客户端节点时,要在多台机器上并行执行的 perl 脚本。
我想知道是否有任何 perl 模块可用于启用类似于 apache hadoop 的分布式并行计算。
例如,当提交到客户端节点时,要在多台机器上并行执行的 perl 脚本。
我是 Perl 多核引擎的作者。
在接下来的几个周末,我将带着MCE与Gearman::XS一起兜风。MCE 擅长最大化给定节点上的可用内核。Gearman擅长工作分配,包括负载均衡等很多特性。将两者结合在一起是我在多个节点上水平扩展 MCE 的想法。:) 直到现在我才与任何人分享这个消息。
为什么这两个模块很合适(我的拙见):
对于分发,需要某种分块引擎。MCE 是一个分块引擎——因此分解输入对于 MCE 来说是很自然的。本质上,MCE 可以在工作提交主机以及工作节点上用于最大化可用内核的双方。
对于工作节点,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。
——马里奥
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);
});
CPAN 上的GRID
模块专为使用分布式计算而设计。
https://metacpan.org/pod/distribution/GRID-Machine/lib/GRID/Machine/perlparintro.pod