我正在使用Linux 机器上makeCluster
的 R 包中的函数snow
在远程 Linux 机器上启动 SOCK 集群。一切似乎都让两台机器成功通信(我能够在两者之间建立 ssh 连接)。但:
makeCluster("192.168.128.24",type="SOCK")
不会抛出任何结果,只是无限期挂起。
我究竟做错了什么?
非常感谢
我正在使用Linux 机器上makeCluster
的 R 包中的函数snow
在远程 Linux 机器上启动 SOCK 集群。一切似乎都让两台机器成功通信(我能够在两者之间建立 ssh 连接)。但:
makeCluster("192.168.128.24",type="SOCK")
不会抛出任何结果,只是无限期挂起。
我究竟做错了什么?
非常感谢
不幸的是,在创建雪(或并行)集群对象时有很多事情会出错,最常见的故障模式是无限期挂起。问题是makeSOCKcluster
一个一个地启动集群worker,并且每个worker(如果成功启动)必须在master继续启动下一个worker之前与master建立一个套接字连接。如果任何工作人员未能连接回主服务器,makeSOCKcluster
将挂起而没有任何错误消息。工作人员可能会发出错误消息,但默认情况下,任何错误消息都会重定向到/dev/null
.
除了 ssh 问题之外,makeSOCKcluster
可能会挂起,因为:
还有更多的可能性。
换句话说,没有进一步的信息,没有人可以诊断出这个问题,因此您必须进行一些故障排除才能获得该信息。
根据我的经验,最有用的故障排除技术是手动模式,您可以通过manual=TRUE
在创建集群对象时指定来启用它。进行设置也是一个好主意,outfile=""
这样来自工作人员的错误消息不会被重定向到/dev/null
:
cl <- makeSOCKcluster("192.168.128.24", manual=TRUE, outfile="")
makeSOCKcluster
将在指定机器上的终端中显示要执行的 Rscript 命令,然后等待您执行该命令。换句话说,在您的情况下, makeSOCKcluster 将挂起,直到您手动启动主机 192.168.128.24 上的工作程序。请记住,这是一种故障排除技术,而不是问题的解决方案,并且希望通过尝试手动启动它们来获得有关为什么工作人员没有开始的更多信息。
显然,使用手动模式绕过了任何 ssh 问题(因为您没有使用 ssh),所以如果您可以在手动模式下成功创建 SOCK 集群,那么可能 ssh 是您的问题。如果未找到 Rscript 命令,则说明 R 未安装,或者安装在其他位置。但希望您会收到一些错误消息,引导您找到解决方案。
如果makeSOCKcluster
在指定机器上执行指定的 Rscript 命令后仍然挂起,那么您可能遇到了网络或防火墙问题。
有关更多故障排除建议,请参阅我在 doParallel / snowfall hangs 中制作集群的答案。