我在LAN上有两台服务器,其中包含新安装的Centos 6.4 minimum和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

最佳答案

您可以通过在创建集群对象时将“ outfile”选项设置为空字符串开始:

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


这使您可以查看来自终端中工作人员的错误消息,这有望为问题提供线索。如果那没有帮助,我建议使用手动模式:

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


这将绕过ssh,并显示命令供您执行,以便在单独的终端中手动启动每个工作程序。这样可以发现未安装的R软件包等问题。它还需要您选择任何调试工具来调试工作程序,尽管这需要一些工作。

如果在执行指定的命令后makePSOCKcluster没有响应,则表明该工作程序无法连接到主进程。如果工作程序未显示任何错误消息,则可能表明网络问题,可能是由于防火墙阻止了连接。由于makePSOCKcluster在R 3.X中默认使用随机端口,因此您应为端口指定一个明确的值,并将防火墙配置为允许连接到该端口。

要测试网络或防火墙问题,您可以尝试使用“ 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


那么您就遇到了主机名解析问题。如果可以找到适用于netcat的主机名,则可以通过“主机”选项makePSOCKcluster指定该名称,从而使makePSOCKcluster("node03", master="node01", port=11234)起作用。

如果netcat立即返回,则可能表明它无法连接到指定的端口。如果一两分钟后返回,则可能表明它根本无法与指定的主机进行通信。无论哪种情况,都请检查netcat的返回值以确认它是错误的:

node03$ echo $?
1


希望这将为您提供有关该问题的足够信息,您可以从网络管理员那里获得帮助。

09-30 19:22