4

如何在集群上并行执行 Unix shell 命令(例如 awk one liner)(第 1 步)并将结果收集回中央节点(第 2 步)?

更新:我刚刚发现http://blog.last.fm/2009/04/06/mapreduce-bash-script 它似乎完全符合我的需要。

4

2 回答 2

2

如果你想做的只是启动一堆远程命令,你可以只使用 perl。您可以“打开”一个 ssh 命令并将结果通过管道传回 perl。(您当然需要设置密钥以允许无密码访问)

open (REMOTE, "ssh user@hostB \"myScript\"|");
while (<REMOTE>)
{
  print $_;
}

您想用您的机器名称制作一个循环,并为每个机器启动一个。之后,只需对文件句柄进行非阻塞读取,以在数据可用时拉回数据。

于 2010-04-16T16:50:49.133 回答
2

并行可以安装在您的中央节点上,并可用于跨多台机器运行命令。

在下面的示例中,使用多个 ssh 连接在远程主机上运行命令。(-j 是在中心节点上同时运行的作业数)。然后可以将结果通过管道传送到命令以执行“减少”阶段。(在本例中排序然后 uniq)。

并行 -j 50 ssh {} "ls" ::: host1 host2 hostn | 排序 | 唯一的-c

此示例假定已在中心节点和集群中的所有机器之间设置“无密钥 ssh 登录”。

远程运行比“ls”更复杂的命令时,正确转义字符可能很棘手,有时您必须转义转义字符。您提到bashreduce,它可能会简化这一点。

于 2013-04-12T11:46:01.443 回答