从Windows计算机启动Linux PSOCK群集会挂起R.

时间:2014-02-26 02:30:28

标签: windows r parallel-processing

我正在尝试使用并行程序包在Linux机器上设置群集。哇是我作为主人使用的机器运行Windows而不是CentOS。

在使用puttygen和plink(putty的ssh版本)进行一些攻击之后,我得到了一个命令字符串,可以在(a)slave上执行Rscript,而无需密码:

plink -i d:/hong/documents/gpadmin.ppk -l gpadmin 192.168.224.128 Rscript

其中gpadmin.ppk是使用puttygen生成的私钥文件,并复制到从属文件。

我将此转换为makeCluster调用,如下所示:

cl <- makeCluster("192.168.224.128",
                  user="gpadmin",
                  rshcmd="plink -i d:/hong/documents/gpadmin.ppk",
                  master="192.168.224.1",
                  rscript="Rscript")

但是当我尝试运行它时,R(在Windows上)挂起。好吧,它不会像崩溃一样挂起,但是在我按下Escape之前它什么也没做。

但是,我可以通过在通话结束时添加manual=TRUE来费力地运行群集:

cl <- makeCluster("192.168.224.128",
                  user="gpadmin",
                  rshcmd="plink -i d:/hong/documents/gpadmin.ppk",
                  master="192.168.224.1",
                  rscript="Rscript",
                  manual=TRUE)

然后我使用上面的plink命令登录到slave,并在生成的bash提示符下运行R显示的字符串。这表明字符串很好,但是makeCluster试图单独运行它会感到困惑。

任何人都可以帮助诊断正在发生的事情,以及如何解决这个问题?我宁愿不必每次都手动登录16个节点来启动集群。

我在主机上的Windows 7上运行R 3.0.2,在从机上运行CentOS上的R 3.0.0。

1 个答案:

答案 0 :(得分:1)

您创建群集的方法似乎是正确的。使用您的指示,我能够从Windows机器上启动Linux机器上的PSOCK群集。

我的第一个想法是它是一个引用问题,但由于Rscript命令在手动模式下为你工作,所以情况似乎并非如此。我的第二个想法是,在非交互式运行时,您的环境未正确初始化。例如,如果Rscript仅在您的PATH中以交互方式运行时会遇到问题,但同样情况似乎并非如此,因为您可以通过plink执行Rscript。您是否检查过〜/ .Rprofile中是否只有交互式工作?您可能希望暂时删除Linux机器上的任何〜/ .Rprofile以查看是否有帮助。

如果工作人员发出任何错误或警告消息,您应该使用outfile=""。您应该在Linux机器上运行“ps”而makeCluster挂起以查看工作人员是退出还是挂起。如果它正在运行,那么这表明只有在非交互式运行时才会出现网络问题,这看起来很奇怪。

其他一些评论:

  • 在主服务器上使用Rterm.exe,以便在使用outfile=""时看到任何工作人员输出。
  • 我建议使用“Pageant”,这样您就不需要使用未加密的私钥。这更安全,并且不需要plink“-i”选项。
  • 在主人和工人身上使用相同版本的R是个好主意。
  • 如果你很绝望,你可以在Linux机器上为Rscript写一个包装脚本,通过strace执行Rscript。这将告诉您当工作人员退出或挂起时执行了哪些系统调用。