2013-07-29 2 views
4

CentOS 6.4 및 R 3.0.1을 새로 설치 한 LAN에 2 대의 서버가 있습니다. 두 컴퓨터 모두 doParallel, snow 및 snowfall 패키지가 설치되어 있습니다.R : doParallel/snowfall의 클러스터 만들기가 응답하지 않습니다.

서버가 서로 잘 ssh 할 수 있습니다.

클러스터를 어느 방향으로 만들려고 할 때 암호를 묻는 메시지가 표시되지만 암호를 입력하면 무기한으로 멈 춥니 다.

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

어떻게 해결할 수 있습니까?

편집 :

I는 또한 (다른 컴퓨터)는 슬레이브로서 이용 될 수있는 호스트와 상기 한 컴퓨터 makePSOCKcluster 호출 시도했지만 아직 응답. 방화벽 문제가있을 수 있습니까? 또한 포트 (22)와 makePSOCKcluster를 사용하여 시도 : 내 iptables에

> 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 

여기

# 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

낮은 수의 포트에 바인드하려면 루트가되어야하며 이미 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"을 사용하여 마스터 프로세스에 연결해보십시오.

> 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 

이제 "NC"표시된 사용 "node03"의 터미널 세션을 시작하고 실행 : 원하는 작업자 호스트의 호스트 허용한다 로컬 컴퓨터상의 포트받는 연결을 지정 수동 모드 makePSOCKcluster 실행 "MASTER"를 인수로 "PORT"의 값 :

node03$ nc node01 11234 

즉시 메시지와 함께 반환해야합니다 마스터 과정 :

socket cluster with 1 nodes on host ‘node03’ 

은 netcat이 소켓 연결에서 조용히 읽고 있기 때문에 메시지를 표시하지 않아야합니다.netcat을 메시지를 표시하는 경우

그러나 :

nc: getaddrinfo: Name or service not known 

는 당신은 호스트 이름 확인 문제가 있습니다. netcat과 작동하는 호스트 이름을 찾을 수 있다면 "master"옵션을 통해 해당 이름을 지정하여 makePSOCKcluster을 사용할 수 있습니다 : makePSOCKcluster("node03", master="node01", port=11234).

netcat가 즉시 반환하는 경우 이는 지정된 포트에 연결할 수 없음을 나타낼 수 있습니다. 1 ~ 2 분 후에 반환하면 지정된 호스트와 전혀 통신 할 수 없다는 것을 나타낼 수 있습니다.

node03$ echo $? 
1 

희망이 당신에게 당신이 네트워크 관리자의 도움을 얻을 수있는 문제에 대한 충분한 정보를 제공합니다 : 각각의 경우에, 체크 netcat을의 반환 값은 오류임을 확인합니다.

+0

감사합니다. 나는 passless-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는 마스터 및 슬레이브 모두에서 비활성화됩니다. 마스터에서 'makePSOCKcluster ("192.168.1.1", port = 11234)를 실행했는데, 이는 슬레이브에서'nc 192.168.1.2 11234 '를 실행하는 동안 멈 춥니 다. 슬레이브에서 nc를 호출 한 직후 호스트 192.168.1.1 '에 1 개의 노드가있는 마스터 "소켓 클러스터에 다음이 나타납니다. (192.168.1.2는 마스터, 1.1은 슬레이브). 그래서, 노예가 그 말을 듣기 전까지는 항구에서 듣고 있지 않다는 뜻입니까? 슬레이브에서 nc를 사용하지 않고 소켓 클러스터를 시작하려면 어떻게해야합니까? 다시 한번 감사드립니다. – dlv

관련 문제