2014-02-26 31 views
1

我正尝试使用并行程序包在Linux机器上安装集群。疣是我作为主人使用的机器运行Windows而不是CentOS。从Windows机器启动Linux PSOCK集群挂起R

后有的用的puttygen和砰砰(腻子的版本的SSH),我得到了管理上(一)从执行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命令从属,并且,在所得到的bash提示符,运行R显示的字符串。这表明该字符串是好的,但makeCluster越来越困惑,试图单独运行它。

任何人都可以帮助诊断发生了什么,以及如何解决它?我宁愿不必每次都手动登录到16+节点来启动群集。

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

回答

1

您创建集群的方法似乎是正确的。根据您的指示,我可以从Windows机器上的Linux机器上启动PSOCK群集。

我的第一个想法是它是一个引用问题,但似乎并非如此,因为Rscript命令在手动模式下为您工作。我的第二个想法是,在非交互式运行时,您的环境未正确初始化。例如,如果Rscript仅在交互式运行时处于PATH中,则会出现问题,但再次看起来并非如此,因为您可以通过plink执行Rscript。你有没有检查过〜/ .Rprofile中只有交互式工作的东西?您可能需要暂时删除Linux机器上的任何〜/ .Rprofile以查看是否有帮助。

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

一些补充意见:

  • 使用Rterm.exe在主因此使用outfile="",当你看到任何工人的产出。
  • 我推荐使用“Pageant”,这样就不需要使用未加密的私钥。这更安全,避免了plink“-i”选项的需要。
  • 在主人和工人身上使用相同版本的R是一个好主意。
  • 如果你绝望,你可以在通过strace执行Rscript的Linux机器上编写Rscript的包装脚本。这会告诉你什么系统调用是在工作人员退出或挂起时执行的。