R:在双平行/降雪中制造集群挂起

R:在双平行/降雪中制造集群挂起,r,parallel-processing,cluster-computing,snow,snowfall,R,Parallel Processing,Cluster Computing,Snow,Snowfall,我在局域网上安装了两台服务器,新安装了Centos 6.4 minimal和R 3.0.1。这两台计算机都安装了双并行、snow和snowfall软件包 服务器之间可以通过ssh很好地相互连接 当我尝试在任意方向创建集群时,都会得到一个输入密码的提示,但在输入密码后,它只是不确定地挂在那里 makePSOCKcluster("192.168.1.1",user="username") 如何对此进行故障排除 编辑: 我还尝试在上面提到的计算机上调用makePSOCKcluster,主机可以用作从

我在局域网上安装了两台服务器,新安装了Centos 6.4 minimal和R 3.0.1。这两台计算机都安装了双并行、snow和snowfall软件包

服务器之间可以通过ssh很好地相互连接

当我尝试在任意方向创建集群时,都会得到一个输入密码的提示,但在输入密码后,它只是不确定地挂在那里

makePSOCKcluster("192.168.1.1",user="username")
如何对此进行故障排除

编辑:

我还尝试在上面提到的计算机上调用makePSOCKcluster,主机可以用作从机(来自其他计算机),但它仍然挂起。那么,是否可能存在防火墙问题?我还尝试将makePSOCKcluster与端口22一起使用:

> 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包。它还允许您使用您选择的任何调试工具来调试worker,尽管这需要一些工作

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

要测试网络或防火墙问题,可以尝试使用“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’
nc: getaddrinfo: Name or service not known
而netcat不应显示任何消息,因为它正在安静地从套接字连接读取数据

但是,如果netcat显示以下消息:

socket cluster with 1 nodes on host ‘node03’
nc: getaddrinfo: Name or service not known
那么您就有了主机名解析问题。如果您可以找到一个与netcat一起工作的主机名,您可以通过“主”选项指定该名称,从而使
makePSOCKcluster
工作:
makePSOCKcluster(“node03”,master=“node01”,port=11234)

如果netcat立即返回,则可能表明它无法连接到指定的端口。如果它在一两分钟后返回,则可能表示它根本无法与指定的主机通信。在任何一种情况下,请检查netcat的返回值,以验证它是否为错误:

node03$ echo $?
1

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

谢谢。我尝试过使用无密码ssh,但没有成功。当使用manual=TRUE的makePSOCKcluster时,它告诉我并行运行“/usr/lib64/R/bin/Rscript'-e::::.slaveRSOCK()”MASTER=genome PORT=11494 OUT=/dev/null TIMEOUT=2592000 METHODS=TRUE XDR=TRUE,我在从机上执行该操作,但之后不会发生任何事情。在OP中添加更多线索。当我在主服务器和从服务器上禁用防火墙(iptables)时,即使手动设置为TRUE,我也会得到相同的结果。谢谢,看起来我有进展了!selinux和iptables在主服务器和从服务器上都被禁用。我在主机上运行了“makePSOCKcluster”(“192.168.1.1”,端口=11234)”,它将一直挂起,直到我在从机上执行“nc 192.168.1.2 11234”。在从机上调用nc后,以下内容立即出现在主“主机'192.168.1.1'上有1个节点的套接字群集”上。(192.168.1.2为主,1.1从)。那么,这是否意味着从机在被告知之前不会监听端口?在从属设备上不使用nc的情况下,如何启动套接字群集?再次感谢。@user1489048不幸的是,实际工作进程没有启动:您欺骗了主进程,使其认为它是在您使用nc连接到它时启动的。问题:使用手动模式时,主机是否显示“主机=192.168.1.2”?否则,设置“master=192.168.1.2”可能会有所帮助。@user1489048换句话说,请尝试运行“makePSOCKcluster”(“192.168.1.1”,master=“192.168.1.2”,port=11234)”。您需要是root才能绑定到数量较少的端口,并且不能绑定到已经绑定到另一个进程(如sshd)的端口。