2017-03-17 15 views
0

私は2つのWindowsマシンを持っていて、どちらもRがインストールされています。私はマスターとして1つを使用して、私のデータの処理をスピードアップするために鎮圧しようとしています。スクリプトを実行するために合計12コアが必要ですが、これを達成するためにsshを使用しています。R並列ライブラリを使用するマシンのクラスタ上のスクリプト

  1. FreeSSHDが
  2. 両方のマシンにインストールされているパテは、私は完全に罰金両方のマシン、無問題へのリモートSSHでき
  3. 両方のマシンにインストールされています。

私はで概説として、マスタとスレーブのやり方で自分のスクリプトを実行するには、以下のサンプルコードを使用しています: 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 

私は上記の接続のさまざまなバリエーションを試しました。それはそれと同様のエラーです。それはlibaryのバグですか?

答えて

0

エラーメッセージは、sshを実行しようとしていることを示しています。終了コード(127)は、sshコマンドが見つかりませんでした。

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

sshが検索PATH上にないことを意味している:あなたが呼び出すことにより、Rでこれを確認することができます。現在、Windowsシステムにsshコマンドがない可能性が最も高いです。代わりに、PuTTYに言及したので、plinkコマンドが必要です。私はデフォルトの設定を使用してパテをインストールしてWindows 8.1で、私が取得:

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

それでも""を取得する場合、あなたはC:\PROGRA~1\PuTTY(またはどこにパテをインストールしている)を含むようにあなたのPATHを更新する必要があります。

代わりに上記で

futureパッケージを(私は著者だ)インストール:

install.packages("future") 

パラレルではなく、将来のパッケージを使用する理由は、それ(i)は冗長な出力を提供することですしかし、もっと重要なのは、(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キーが表示されている必要があります。これを回避する方法はありません - パスワードを入力せずにリモートマシンにSSHできるようにする必要があります(これもパラレルパッケージの仕組みです)。 PuTTYgenを使用して、公開と秘密のSSH鍵ペアを生成できます。ですから、既にこれをセットアップしていない場合は、PuTTYを単独で使用して実行できることを確認してください。それが機能するときだけ、Rからアクセスしてください。

関連する問題