我正在尝试使用并行程序包在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。
答案 0 :(得分:1)
您创建群集的方法似乎是正确的。使用您的指示,我能够从Windows机器上启动Linux机器上的PSOCK群集。
我的第一个想法是它是一个引用问题,但由于Rscript命令在手动模式下为你工作,所以情况似乎并非如此。我的第二个想法是,在非交互式运行时,您的环境未正确初始化。例如,如果Rscript仅在您的PATH中以交互方式运行时会遇到问题,但同样情况似乎并非如此,因为您可以通过plink执行Rscript。您是否检查过〜/ .Rprofile中是否只有交互式工作?您可能希望暂时删除Linux机器上的任何〜/ .Rprofile以查看是否有帮助。
如果工作人员发出任何错误或警告消息,您应该使用outfile=""
。您应该在Linux机器上运行“ps”而makeCluster
挂起以查看工作人员是退出还是挂起。如果它正在运行,那么这表明只有在非交互式运行时才会出现网络问题,这看起来很奇怪。
其他一些评论:
outfile=""
时看到任何工作人员输出。