R:在 doParallel/降雪中制作集群挂起

标签 r parallel-processing cluster-computing snow snowfall

我在局域网上有两台服务器,全新安装了 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”上启动终端 session 并使用“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通过“master”选项指定该名称来工作:makePSOCKcluster("node03", master="node01", port=11234) .

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

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

关于R:在 doParallel/降雪中制作集群挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17923256/

相关文章:

R:ggvis-灰色背景(如ggplot2)

R.exe 和 Rscript.exe

c++ - Boost线程间通信队列

session - Ubuntu:远程登录 (SSHD) - 在超时时终止 session 和作业

docker - 如何在笔记本电脑上运行多个 docker 节点来模拟集群?

mysql - Ejabberd 如何管理集群的数据库?

R - 循环遍历数据集并更改列名

r - 如何迭代到网站的最后一页并在 .csv 文件中逐行写入数据?

c++ - 如何在 CUDA 中(有效地)打包位?

python - 如何从 multiprocessing.Pool.map 的worker_funtion内部为数组赋值?