4

LAN 上に 2 台のサーバーがあり、Centos 6.4 最小および R 3.0.1 が新規インストールされています。両方のコンピューターに doParallel、snow、および snowfall パッケージがインストールされています。

サーバーは互いに正常にsshできます。

いずれかの方向にクラスタを作成しようとすると、パスワードを求めるプロンプトが表示されますが、パスワードを入力した後、無期限にハングします。

makePSOCKcluster("192.168.1.1",user="username")

これをトラブルシューティングするにはどうすればよいですか?

編集:

また、(他のコンピューターから) スレーブとして使用できるホストを備えた上記のコンピューターで makePSOCKcluster を呼び出してみましたが、それでもハングします。それで、ファイアウォールの問題がある可能性はありますか?また、ポート 22 で makePSOCKcluster を使用してみました。

> makePSOCKcluster("192.168.1.1",user="username",port=22)
Error in socketConnection("localhost", port = port, server = TRUE, blocking = TRUE,  :
  cannot open the connection
In addition: Warning message:
In socketConnection("localhost", port = port, server = TRUE, blocking = TRUE,  :
  port 22 cannot be opened

これが私のiptablesです

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
4

1 に答える 1

8

クラスタ オブジェクトを作成するときに、「outfile」オプションを空の文字列に設定することから始めることができます。

makePSOCKcluster("192.168.1.1",user="username",outfile="")

これにより、ターミナルでワーカーからのエラー メッセージを確認できます。これにより、問題の手がかりが得られることが期待されます。それでも問題が解決しない場合は、手動モードを使用することをお勧めします。

makePSOCKcluster("192.168.1.1",user="username",outfile="",manual=TRUE)

これにより、ssh がバイパスされ、個別のターミナルで各ワーカーを手動で開始するために実行するコマンドが表示されます。これにより、インストールされていない R パッケージなどの問題が明らかになる可能性があります。また、少し手間はかかりますが、任意のデバッグ ツールを使用してワーカーをデバッグすることもできます。

makePSOCKcluster指定したコマンドを実行しても が応答しない場合は、ワーカーがマスター プロセスに接続できなかったことを意味します。ワーカーにエラー メッセージが表示されない場合は、ファイアウォールが接続をブロックしている可能性があるため、ネットワークの問題を示している可能性があります。R 3.XmakePSOCKclusterでは既定でランダムなポートが使用されるため、ポートに明示的な値を指定し、そのポートへの接続を許可するようにファイアウォールを構成する必要があります。

ネットワークまたはファイアウォールの問題をテストするには、「netcat」を使用してマスター プロセスに接続してみてください。手動モードで実行makePSOCKclusterし、目的のワーカー ホストのホスト名と、着信接続を許可する必要があるローカル マシンのポートを指定します。

> library(parallel)
> makePSOCKcluster("node03", port=11234, manual=TRUE)
Manually start worker on node03 with
   '/usr/lib/R/bin/Rscript' -e 'parallel:::.slaveRSOCK()' MASTER=node01
PORT=11234 OUT=/dev/null TIMEOUT=2592000 METHODS=TRUE XDR=TRUE 

「node03」で端末セッションを開始し、指定された「MASTER」と「PORT」の値を引数として使用して「nc」を実行します。

node03$ nc node01 11234

マスター プロセスはすぐに次のメッセージを返す必要があります。

socket cluster with 1 nodes on host ‘node03’

netcat はソケット接続から静かに読み取りを行っているため、メッセージは表示されません。

ただし、netcat が次のメッセージを表示する場合:

nc: getaddrinfo: Name or service not known

次に、ホスト名の解決に問題があります。makePSOCKclusternetcat で動作するホスト名が見つかった場合は、「master」オプションでその名前を指定することで作業を開始できる場合がありますmakePSOCKcluster("node03", master="node01", port=11234)

netcat がすぐに戻る場合は、指定されたポートに接続できなかったことを示している可能性があります。1 ~ 2 分後に返さ​​れる場合は、指定されたホストとまったく通信できなかったことを示している可能性があります。いずれの場合も、netcat の戻り値を調べて、エラーであることを確認します。

node03$ echo $?
1

うまくいけば、ネットワーク管理者から助けを得ることができる問題についての十分な情報が得られます.

于 2013-07-29T13:39:56.177 に答える