2013-07-29 128 views
4

我有两台服务器在局域网上在CentOS 6.4最小的全新安装和R 3.0.1。两台计算机都安装了并行,降雪和降雪软件包。R:在doParallel /降雪使集群挂起

的服务器可以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 
+0

您需要是root用户才能绑定到低端口号,并且您不能绑定到已经绑定到另一个进程(如sshd)的端口。 –

回答

8

您可以通过设置启动“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”启动终端会话并执行“NC”使用所指示的“主” 和 “PORT” 作为参数的值:

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 

希望这会给你,你可以从网络管理员获得帮助的问题的足够信息。

+0

谢谢。我试过用passwordless-ssh,但没有运气。当使用makePSOCKcluster和manual = TRUE时,它告诉我运行'/ usr/lib64/R/bin/Rscript'-e'parallel :::。slaveRSOCK()'MASTER =基因组端口= 11494 OUT =/dev/null TIMEOUT = 2592000 METHODS = TRUE XDR = TRUE我在奴隶身上做的事情,但之后没有任何反应。在OP中提供更多线索。 – dlv

+0

当我在主控和从属设备上禁用防火墙(iptables)时,即使manual = TRUE,也会得到相同的结果。 – dlv

+0

谢谢,它看起来像我在某处!主控和从控都禁用了selinux和iptables。我在master上运行'makePSOCKcluster(“192.168.1.1”,port = 11234)“,直到我在从服务器上执行'nc 192.168.1.2 11234'为止。紧接在从机上调用nc之后,主机“主机上有1个节点”的套接字集群出现以下内容:“192.168.1.1'”。 (192.168.1.2是主设备,1.1是从设备)。那么,这是否意味着奴隶在告知之前不会在港口上聆听?如何在不使用slave的情况下启动套接字集群?再次感谢。 – dlv