我正在使用來自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的答案。