我正在使用来自Linux机器的R程序包snow
中的makeCluster
函数在远程Linux机器上启动SOCK群集。所有似乎都解决了两台机器成功通信(我能够建立两者之间的SSH连接)。但是:R雪中的makeCluster函数无限期挂起
makeCluster("192.168.128.24",type="SOCK")
不会抛出任何结果,只是无限期地挂起。
我在做什么错?
非常感谢
我正在使用来自Linux机器的R程序包snow
中的makeCluster
函数在远程Linux机器上启动SOCK群集。所有似乎都解决了两台机器成功通信(我能够建立两者之间的SSH连接)。但是:R雪中的makeCluster函数无限期挂起
makeCluster("192.168.128.24",type="SOCK")
不会抛出任何结果,只是无限期地挂起。
我在做什么错?
非常感谢
不幸的是,有很多东西创建雪(或平行)群集对象时可以去错了,最常见的故障模式是无限期挂起。问题在于,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上手动启动worker为止。请记住,这是一种故障排除技术,不是问题的解决方案,而是希望获得更多关于为什么员工不是通过手动启动他们而开始的信息。
显然,使用手动模式可以绕过任何ssh问题(因为您不使用ssh),所以如果您可以在手动模式下成功创建SOCK群集,那么可能ssh是您的问题。如果找不到Rscript命令,那么R没有安装,或者它安装在不同的位置。但希望你会得到一些错误信息,这将导致你的解决方案。
如果makeSOCKcluster
在指定计算机上执行指定的Rscript命令后仍然只是挂起,那么您可能有网络或防火墙问题。
有关更多的疑难解答的建议,请参阅我的making cluster in doParallel/snowfall hangs的答案。