我正在使用R包snow中的makeCluster
函数,在Linux机器上启动一个远程Linux机器上的SOCK集群。看起来两台机器之间的通信已经顺利(我能够在两者之间建立ssh连接)。但是:
makeCluster("192.168.128.24",type="SOCK")
没有任何结果,只是无限期地挂起。
我做错了什么吗?
非常感谢。
我正在使用R包snow中的makeCluster
函数,在Linux机器上启动一个远程Linux机器上的SOCK集群。看起来两台机器之间的通信已经顺利(我能够在两者之间建立ssh连接)。但是:
makeCluster("192.168.128.24",type="SOCK")
没有任何结果,只是无限期地挂起。
我做错了什么吗?
非常感谢。
很不幸,在创建一个 snow(或并行)集群对象时可能会出现许多问题,最常见的故障模式是无限期悬挂。问题在于 makeSOCKcluster
逐个启动集群工作程序,每个工作程序(如果成功启动)必须在主节点之前建立套接字连接,然后主节点才能继续启动下一个工作程序。如果任何一个工作程序未能连接回主节点,则 makeSOCKcluster
将悬挂而没有任何错误信息。工作程序可能会发出错误消息,但默认情况下任何错误消息都会被重定向到 /dev/null
。
除了ssh问题外, makeSOCKcluster
可能会因以下原因而悬挂:
还有许多其他可能性。
换句话说,没有更多的信息,没有人可以诊断这个问题,因此您必须进行一些故障排除以获取该信息。
根据我的经验,最有用的故障排除技术是手动模式,可以在创建集群对象时通过指定 manual=TRUE
来启用。同时,最好将< code> 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,要么安装在不同位置。但希望您能获得一些错误消息,这将引导您找到解决方案。
如果您在在指定的机器上执行了指定的Rscript命令后,makeSOCKcluster
仍然挂起,那么您可能有网络或防火墙问题。
有关更多故障排除建议,请参见making cluster in doParallel / snowfall hangs的答案。