2013-07-29 192 views
4

我有兩臺服務器在局域網上在CentOS 6.4最小的全新安裝和R 3.0.1。兩臺計算機都安裝了並行,降雪和降雪軟件包。R:在doParallel /降雪使集羣掛起

的服務器可以ssh到對方的罰款。

當我試圖使集羣在任一方向,我得到一個密碼的提示,但在輸入密碼後,它只是掛起那裏無限期地。

makePSOCKcluster("192.168.1.1",user="username") 

如何解決此問題?

編輯:

我還試圖調用makePSOCKcluster上述計算機上的,其能夠被用作從設備(從其他計算機)的主機,但它仍然掛起。那麼,是否有可能存在防火牆問題?我使用makePSOCKcluster用端口22也試過:

> makePSOCKcluster("192.168.1.1",user="username",port=22) 
Error in socketConnection("localhost", port = port, server = TRUE, blocking = TRUE, : 
    cannot open the connection 
In addition: Warning message: 
In socketConnection("localhost", port = port, server = TRUE, blocking = TRUE, : 
    port 22 cannot be opened 

,這裏是我的iptables

# Firewall configuration written by system-config-firewall 
# Manual customization of this file is not recommended. 
*filter 
:INPUT ACCEPT [0:0] 
:FORWARD ACCEPT [0:0] 
:OUTPUT ACCEPT [0:0] 
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
COMMIT 
+0

您需要是root用戶才能綁定到低端口號,並且您不能綁定到已經綁定到另一個進程(如sshd)的端口。 –

回答

8

您可以通過設置啓動「OUTFILE」選項來創建羣集對象時,一個空字符串:

makePSOCKcluster("192.168.1.1",user="username",outfile="") 

這可以讓你看到你的終端工人,這將有望提供一個線索的問題的錯誤消息。如果這樣做沒有幫助,我建議使用手動模式:

makePSOCKcluster("192.168.1.1",user="username",outfile="",manual=TRUE) 

這繞過SSH,並顯示命令,爲您以手動啓動每個工人在單獨的終端執行。這可以發現諸如未安裝的R軟件包等問題。它還允許您使用您選擇的任何調試工具來調試工作人員,儘管這需要一些工作。

如果makePSOCKcluster在執行指定的命令後沒有響應,則意味着工作人員無法連接到主進程。如果工作人員不顯示任何錯誤消息,則可能表示網絡問題,可能是由於防火牆阻止了連接。由於makePSOCKcluster默認使用R中3.X一個隨機端口,應指定端口明確的價值和配置防火牆以允許該端口的連接。

爲了測試網絡或防火牆問題,你可以嘗試連接到使用「netcat的」主進程。在手動模式下執行makePSOCKcluster,指定所需工人主機的主機名和本地機器上的端口應允許進入的連接:

> library(parallel) 
> makePSOCKcluster("node03", port=11234, manual=TRUE) 
Manually start worker on node03 with 
    '/usr/lib/R/bin/Rscript' -e 'parallel:::.slaveRSOCK()' MASTER=node01 
PORT=11234 OUT=/dev/null TIMEOUT=2592000 METHODS=TRUE XDR=TRUE 

現在的「node03」啓動終端會話並執行「NC」使用所指示的「主」 和 「PORT」 作爲參數的值:

node03$ nc node01 11234 

主進程應立即與消息返回:

socket cluster with 1 nodes on host ‘node03’ 

,而netcat應該不顯示消息,因爲它靜靜地從套接字連接讀取。

但是,如果netcat的顯示消息:

nc: getaddrinfo: Name or service not known 

那麼你有一個主機名解析問題。如果您可以找到可以與netcat一起使用的主機名,則可以通過「主」選項指定該名稱來獲得makePSOCKcluster的工作:makePSOCKcluster("node03", master="node01", port=11234)

如果netcat立即返回,則可能表示它無法連接到指定的端口。如果它在一兩分鐘後返回,那可能表示它根本無法與指定的主機進行通信。在這兩種情況下,檢查的netcat的返回值來驗證,這是一個錯誤:

node03$ echo $? 
1 

希望這會給你,你可以從網絡管理員獲得幫助的問題的足夠信息。

+0

謝謝。我試過用passwordless-ssh,但沒有運氣。當使用makePSOCKcluster和manual = TRUE時,它告訴我運行'/ usr/lib64/R/bin/Rscript'-e'parallel :::。slaveRSOCK()'MASTER =基因組端口= 11494 OUT =/dev/null TIMEOUT = 2592000 METHODS = TRUE XDR = TRUE我在奴隸身上做的事情,但之後沒有任何反應。在OP中提供更多線索。 – dlv

+0

當我在主控和從屬設備上禁用防火牆(iptables)時,即使manual = TRUE,也會得到相同的結果。 – dlv

+0

謝謝,它看起來像我在某處!主控和從控都禁用了selinux和iptables。我在master上運行'makePSOCKcluster(「192.168.1.1」,port = 11234)「,直到我在從服務器上執行'nc 192.168.1.2 11234'爲止。緊接在從機上調用nc之後,主機「主機上有1個節點」的套接字集羣出現以下內容:「192.168.1.1'」。 (192.168.1.2是主設備,1.1是從設備)。那麼,這是否意味着奴隸在告知之前不會在港口上聆聽?如何在不使用slave的情況下啓動套接字集羣?再次感謝。 – dlv