如何在集群上并行执行Unix shell命令(例如awk一个班轮)(步骤1)并将结果收集回中央节点(步骤2)?如何使用shell命令实现MapReduce?
更新:我刚刚找到了http://blog.last.fm/2009/04/06/mapreduce-bash-script 它似乎正是我所需要的。
如何在集群上并行执行Unix shell命令(例如awk一个班轮)(步骤1)并将结果收集回中央节点(步骤2)?如何使用shell命令实现MapReduce?
更新:我刚刚找到了http://blog.last.fm/2009/04/06/mapreduce-bash-script 它似乎正是我所需要的。
如果你想要做的是发射一堆远程命令,你可以使用perl。你可以“打开”一个ssh命令并将结果传回给perl。 (当然你需要设置密钥,以允许无密码的访问)
open (REMOTE, "ssh [email protected] \"myScript\"|");
while (<REMOTE>)
{
print $_;
}
你想要手艺与你的机器名称的循环,火了一个每个。之后,只要非阻塞读取文件句柄以在数据可用时将其拉回。
parallel可以安装在您的中央节点上,并可用于跨多台机器运行命令。
在下面的示例中,多个ssh连接用于在远程主机上运行命令。 (-j是在中央节点上同时运行的作业数量)。然后可以将结果传送到执行“减少”阶段的命令。 (在这个例子中排序然后uniq)。
parallel -j 50 ssh {}“ls”::: host1 host2 hostn |排序| uniq的-c
这个例子假定“无钥匙ssh登录”已设置的中央节点与集群中的所有机器之间。
当运行更复杂的远程命令“ls”时,正确转义字符可能会非常棘手,有时您必须转义转义字符。你提到bashreduce,它可能会简化这个。