2017-03-17 45 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訪問它。