您如何在集群上并行执行Unix shell命令(例如,awk一个内衬)(步骤1)并将结果收集回中央节点(步骤2)?
更新:我刚刚发现http://blog.last.fm/2009/04/06/mapreduce-bash-script它似乎完全符合我的需求。
如果要尝试执行的操作只是解雇一堆远程命令,则可以只使用perl。您可以“打开” ssh命令并将结果通过管道传送回perl。 (您当然需要设置密钥以允许无密码访问)
open (REMOTE, "ssh user@hostB \"myScript\"|");
while (<REMOTE>)
{
print $_;
}
您想用您的计算机名称制作一个循环,然后为每个计算机启动一个。之后,只需对文件句柄进行非阻塞读取,以在数据可用时将其拉回。
parallel可以安装在中央节点上,并且可以用于在多台计算机上运行命令。
在下面的示例中,多个ssh连接用于在远程主机上运行命令。 (-j是在中央节点上同时运行的作业数)。然后可以将结果通过管道传递给命令以执行“减少”阶段。 (在此示例中,然后对uniq进行排序)。
parallel -j 50 ssh {}“ ls” ::: host1 host2 hostn |排序uniq -c
此示例假定在中央节点和群集中的所有计算机之间都设置了“无密钥ssh登录”。
远程运行比“ ls”更复杂的命令时,正确地转义字符可能很棘手,有时您必须转义转义字符。您提到bashreduce,可以简化此过程。