我正在使用来自Linux机器的R package makeCluster
的{{1}}函数来启动远程Linux机器上的SOCK集群。一切似乎已经解决了两台机器成功通信(我能够建立两者之间的ssh连接)。但是:
snow
不会抛出任何结果,只是无限期挂起。
我做错了什么?
非常感谢
答案 0 :(得分:9)
不幸的是,创建雪(或并行)群集对象时可能会出现很多问题,最常见的故障模式是无限期挂起。问题是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,或者它安装在其他位置。但希望你会得到一些错误信息,引导你找到解决方案。
如果makeSOCKcluster
在指定的计算机上执行指定的Rscript命令后仍然挂起,则可能存在网络或防火墙问题。
有关更多问题排查建议,请参阅我对making cluster in doParallel / snowfall hangs的回答。