2017-03-17 98 views
0

我有两台Windows机器,都安装了R。我正在尝试使用一个作为主人和salve来加速处理我的数据。我总共有12个内核来运行脚本,我使用ssh来实现这一点。R使用并行库的机器集群上的脚本

  1. FreeSSHD已经安装在两台机器上
  2. 腻子已经安装在两台机器上
  3. 我可以远程SSH到两台机器完全正常,没有任何问题。

我使用下面的示例代码在一个主从方式运行我的脚本,通过所概述: http://www.win-vector.com/blog/2016/01/running-r-jobs-quickly-on-many-machines/

primary <- '171.27.27.190' 
    machineAddresses <- list(list(host=primary,user='james',ncore=2),list(host='173.29.50.45',user='james',ncore=4)) 

    spec <- lapply(machineAddresses,(function(machine) {rep(list(list(host=machine$host,user=machine$user)), machine$ncore)})) 
    spec <- unlist(spec,recursive=FALSE) 

    parallelCluster <- parallel::makeCluster(type='PSOCK',master=primary,spec=spec) 
    print(parallelCluster) 

脚本只是挂在R和似乎在等待下面打印一个输入和我必须点击警告。

running command 'ssh -l james 171.27.27.190 "\"C:/Users/james/DOCUME~1/R-33~1.3/bin/x64/Rscript\" --default-packages=datasets,utils,grDevices,graphics,stats,methods -e \"parallel:::.slaveRSOCK()\" MASTER=171.27.27.190 PORT=11923 OUT=/dev/null TIMEOUT=2592000 XDR=TRUE"' had status 127 

我已经尝试了上面的连接的不同变化,它产生了一个类似的错误。这是库里的错误吗?

回答

0

错误消息显示它尝试运行ssh。退出代码是127,告诉我们找不到ssh命令。在R中可以验证这一点,通过调用:

> Sys.which("ssh") 
ssh 
"" 

这意味着ssh不上搜索PATH。现在,您很可能在Windows系统上没有ssh命令。相反,既然你提到了PuTTY,你应该有plink命令。在我的Windows 8.1,我使用默认设置安装腻子,我得到:

> Sys.which("plink") 
          plink 
"C:\\PROGRA~1\\PuTTY\\plink.exe" 

如果你仍然得到"",你需要更新你的PATH包含C:\PROGRA~1\PuTTY(或你已经安装了腻子)。

利用上述的地方,安装future包(我的作者):

install.packages("future") 

之所以使用,而不是并行的未来包,是它(ⅰ)提供详细的输出,但更重要的是,它(ii)使用反向SSH隧道,避免远程机器尝试连接回本地计算机(需要执行此操作)时防火墙的麻烦等。

看看以下工作:

> library("future") 
> cl <- makeClusterPSOCK("171.27.27.190", user = "james", 
      rshcmd = c("plink", "-ssh", "-i", "C:/Users/james/.ssh/putty.ppk"), 
      homogeneous = FALSE, verbose = TRUE) 
Starting worker #1 on ‘171.27.27.190’: "plink" "-ssh" "-i" "C:/Users/james/.ssh/putty.ppk" -R 11671:localhost:11671 -l james 171.27.27.190 "\"Rscript\" --default-packages=datasets,utils,grDevices,graphics,stats,methods -e \"parallel:::.slaveRSOCK()\" MASTER=localhost PORT=11671 OUT= TIMEOUT=2592000 XDR=TRUE" 
Waiting for worker #1 on ‘171.27.27.190’ to connect back 
Connection with worker #1 on ‘171.27.27.190’ established 

你会看到不同的端口号大于11671,但除此之外,它看起来应该是相同的。

请注意,您需要在本地计算机和远程计算机之间建立SSH密钥身份验证。这就是"-i", "C:/Users/james/.ssh/putty.ppk"选项所关注的内容;它会告知plink -ssh使用您的专用 SSH密钥连接到远程计算机。远程机器必须列出您的公开的 SSH密钥。没有办法解决这个问题 - 你需要能够在不输入密码的情况下进入远程机器(这也是并行软件包的工作原理)。您可以使用PuTTYgen生成公私密SSH密钥对。所以,如果你没有这个设置,确保你可以使用PuTTY自己做。只有这样做的时候,试着从R访问它。