我正在使用来自R包的makeCluster
函数,snow
从Linux机器开始在远程Linux机器上启动SOCK集群。这两台机器似乎已经成功地进行了通信(我能够在这两台机器之间建立ssh连接)。但是:
makeCluster("192.168.128.24",type="SOCK")
不会抛出任何结果,只是无限期挂起。
我做错了什么?
非常感谢
发布于 2013-07-31 16:43:54
不幸的是,在创建雪花(或并行)集群对象时,有很多事情可能出错,最常见的故障模式是无限期挂起。问题是,makeSOCKcluster
逐个启动集群工作人员,每个工作人员(如果成功启动)必须在主服务器启动下一个工作人员之前建立一个与主服务器的套接字连接。如果任何工作人员未能连接到主服务器,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,要么安装在不同的位置。但希望您会得到一些错误消息,这将引导您找到解决方案。
如果在指定的机器上执行指定的Rscript命令后,makeSOCKcluster
仍然挂起,那么您可能会遇到网络或防火墙问题。
有关更多疑难解答的建议,请参见我对making cluster in doParallel / snowfall hangs的回答。
https://stackoverflow.com/questions/17966055
复制相似问题