[클러스터] Globus 2.0 사용자 가이드
UserGuide – Globus 2.0
작성자: 권오경 (okkwon@kisti.re.kr)
최종 수정 날짜: 2002-05-27
이 문서는 Globus 2.0 툴킷을 리눅스 PC에 설치한후 사용하는 방법을 설명한다.
RedHat Linux 7.1(Linux 커널 버젼은 2.4.2)을 기준으로 설명하였으며,
Linux 표준 쉘인 bash 쉘을 이용한다고 가정하였다.
‘#’는 root 프롬프트를 의미하고, ‘$’는 사용자 프롬프트를 의미한다.
globus version: 2.0
example hostname: sdd47.hpcnet.ne.kr(localhost), sdd113.hpcnet.ne.kr
OS: RedHat 7.1
kernel version: 2.4.2-2
gcc version: 2.96
목차
설정이 제대로 되었나?
Proxy 생성
Hello World 1
Hello World 2
Hello World 3
Hello World 4
파일 전송
MPICH-G2를 사용해보자.
참고문서
——————————————————————————–
설정이 제대로 되었나? [[목차]]
각 자원이 제대로 사용할 수 있는지 알기 위해서 다음과 같은 명령어를 사용해 본다.
$ globusrun -a -r localhost
$ globusrun -a -r sdd113.hpcnet.ne.kr
localhost에 대해서 다음과 같은 에러가 발생할것이다.
globusrun: Error initializing GRAM: authentication with the remote server failed
인증을 받아서 사용할려면 다음과 같이 Proxy를 만들어야 한다.
(참고로 1.1.x와는 달리 globus-setup-test가 없다.)
Proxy 생성 [[목차]]
Globus를 시작 할때마다 사용자는 Proxy를 먼저 만들어야 한다.
$ grid-proxy-init
Your identity: /O=Grid/O=Globus/OU=hpcnet.ne.kr/CN=globus at sdd47
Enter GRID pass phrase for this identity:
Creating proxy ………………………. Done
Your proxy is valid until Mon May 27 21:07:38 2002
Proxy는 필요할때 Globus에 대한 certificate를 제공한다.
사용자는 한번 Proxy를 만들면 더이상 암호를 입력할 필요가 없다.
하지만 이 Proxy는 정해진 시간에만 유효하다. 기본적으로 12시간을 주고
-hours 옵션을 사용해서 시간을 재조정할 수 있다.
(참고로 1.1.x 버전과는 약간 다른 화면표시를 볼수 있다.)
$ grid-proxy-info -all
subject : /O=Grid/O=Globus/OU=hpcnet.ne.kr/CN=gfk/CN=proxy
issuer : /O=Grid/O=Globus/OU=hpcnet.ne.kr/CN=gfk
type : full
strength : 512 bits
timeleft : 0:00:00
Proxy가 얼마나 유효한지에 대한 정보를 알수 있는 명령어이다.
-all 옵션을 사용해서 유효한 시간 뿐아니라 다른 정보에 대해서 알수 있다.
grid-proxy-destory
grid-proxy-init를 통해 만들어진 Proxy를 소멸 시키는 명령어이다.
/tmp/x509up_u[userid] 형태로 생성이 된 Proxy 파일을 제거시키게 된다.
$ globusrun -a -r localhost
GRAM Authentication test successful
위와 같은 메세지를 받았으면 이제 그리드를 이용해보자.
Hello World 1 [[목차]]
job을 실행하기 위해서 두가지 방법이 있다.
첫번째 방법은 globus-job-run을 사용해서 결과를 바로 얻는 것이다.
문법 :
$ globus-job-run <hostname> </path/executable> <arguments>
예제:
$ globus-job-run localhost /bin/echo “Hello World”
Hello World
$ globus-job-run sdd113 /bin/echo “Hello World”
Hello World
이때 path는 실행 파일(executable)이 있는 곳의 절대 경로를 적어야 한다.
두번째 방법은 globus-job-submit을 사용(batch 작업)해서 결과를 간접적으로 얻는 방법이다.
$ globus-job-submit localhost /bin/echo “Hello World”
https://sdd47.hpcnet.ne.kr:37973/26741/1019356045/
실행을 하고 나면 위와 같은 URL주소를 나타낸다.
즉 작업에 대한 결과는 위의 URL주소를 통해 얻을 수 있다.
위의 https주소는 Globus에서 제공하는 GASS서버의 주소로서
다음과 같이 작업의 상태(진행중인지 마쳤는지)를 먼저 알아야 한다.
$ globus-job-status https://sdd47.hpcnet.ne.kr:37973/26741/1019356045/
DONE
위와 같이 작업이 마쳤는지 확인이 끝나면 이제 작업의 stdout결과를 얻어와야 한다.
$ globus-job-get-output https://sdd47.hpcnet.ne.kr:37973/26741/1019356045/
Hello World
Hello World 2 [[목차]]
Hellow World를 실행하는 shell script를 다음과 같이 만들어 보자.
$ vi hello.sh
#!/bin/sh
echo “Hello World from $1”
:wq
$ chmod +x hello.sh
위와 같이 globus-job-run을 사용해서 로컬 기계(sdd47)에서 실행 시켜보자.
$ globus-job-run localhost hello.sh globus
Hello World from globus
위의 Hello World가 성공 했다면 이것 또한 쉽게 성공할 수 있을 것이다.
이제 sdd113에서 실행을 해보자.
$ globus-job-run sdd113 hello.sh globus
GRAM Job submission failed because the executable does not exist (error code 5)
위의 Hello World 예제는 localhost와 sdd113각 기계에 /bin/echo이
설치가 되어 있어서 sdd113의 기계를 원격적으로 실행할 수 있다.
하지만 a.sh은 sdd113에 있지 않기 때문에 바로 실행이 안된다.
a.sh을 sdd113으로 옮길 수 있어야 한다. 그래서 -stage 옵션을 통해서
실행 파일인 a.sh이 원격지에 자동으로 옮겨지게 된다.
다음을 실행해보자.
$ globus-job-run sdd113 -stage hello.sh globus
Hello World from globus
다음과 같이 globus-job-submit 또한 제대로 작동한다.
$ globus-job-submit sdd113 -stage hello.sh globus
https://sdd113.hpcnet.ne.kr:57579/17837/1022458501/
$ globus-job-status https://sdd113.hpcnet.ne.kr:57579/17837/1022458501/
DONE
$ globus-job-get-output https://sdd113.hpcnet.ne.kr:57579/17837/1022458501/
Hello World from globus
Hello World 3 [[목차]]
이번에는 globusrun이라는 프로그램을 이용해서 Hello World를 호출한다.
globusrun은 Globus Resource Specification Langauge(RSL)로 작성된 스크립트를 작동시키는데 사용된다.
그러면 RSL로 만들어진 script를 하나 만들어보자.
$ vi hello.rsl
& (executable=/bin/echo)
(arguments=”Hello Globus World”)
:wq
$ globusrun -o -r sdd113 -f hello.rsl
Hello Globus World
RSL에서 executable은 실행되는 파일의 절대 경로, arguments는 인자들이다.
globusrun에서 -f 옵션를 통해서 RSL 파일을 정하고, -r 옵션을 통해서 실행되는 리소스를 정한다.
-o 옵션은 실행되는 stdout과 stderr를 로컬로 가져오는 옵션이다.
이번에는 위의 hello.sh를 RSL로 만들어 보자.
$ vi hello2.rsl
& (executable=$(GLOBUSRUN_GASS_URL) # “/home/gfk/hello.sh”)
(arguments=”globus”)
:wq
$ globusrun -s -r sdd113 -f hello2.rsl
Hello Globus World from globus
globusrun은 -s 옵션을 통해 GASS 서버를 실행시킨 다음에 GLOBUSRUN_GASS_URL 변수에
GASS 서버의 주소를 할당하게 된다. executable자체는 로컬시스템의 파일 뿐아니라 위와 같이
GASS서버의 주소까지 사용할 수 있다. 그러면 원격 자원의 HOME
directory에 hello.sh를 복사를 한뒤 실행이 이루어진다.
(실행되는 디렉토리는 directory라는 rsl문법을 통해 설정가능하다.)
다 끝나면 지우는 역할까지 globusrun에서 이루어진다.
(참고로 1.1.x에서는 -s옵션안에 -o옵션기능과 GLOBUSRUN_GASS_URL변수 할당 두가지가
모두 이루어졌지만 2.0부터는 옵션을 나누었다.)
참고 : globus-job-run은 RSL 스크립트를 만든 다음에 globusrun에 해당 스크립트를 넘겨주게 된다.
globus-job-run을 다음과 같이 -dumprsl 옵션을 사용하면 RSL을 볼 수 있다.
$ globus-job-run -dumprsl sdd113 -stage hello.sh globus
&(executable=$(GLOBUSRUN_GASS_URL) # “/home/gfk/hello.sh”)
(arguments= “globus”)
즉 -stage 옵션을 사용하면 GASS서버를 띄워서 원격지로 실행파일을 옮기게 된다.
globus-job-submit 프로그램도 RSL 스크립트를 만든 다음에 globusrun에 넘겨준다.
$ globus-job-submit -dumprsl sdd113 -stage hello.sh globus > submit.rsl
$ more submit.rsl
&(executable=$(GLOBUSRUN_GASS_URL) # “/home/globus/hello.sh”)
(arguments= “globus”)
(stdout=x-gass-cache://$(GLOBUS_GRAM_JOB_CONTACT)stdout anExtraTag)
(stderr=x-gass-cache://$(GLOBUS_GRAM_JOB_CONTACT)stderr anExtraTag)
$ globusrun -b -r sdd113 -f submit.rsl
https://sdd113.hpcnet.ne.kr:40558/31200/1019802180/
$ globus-job-status https://sdd113.hpcnet.ne.kr:40558/31200/1019802180/
DONE
$ globus-job-get-output https://sdd113.hpcnet.ne.kr:40558/31200/1019802180/
Hello Globus World from globus
stdout부분에 x-gass-cache주소로 값을 넣어주면, 프로그램이 실행하는 stdout은
x-gass-cache의 주소로 값을 넣게 된다. 뒤의 anExtraTag는 tag이름이다.
sdd113으로 가서 ~/.gass_cache/globus_gass_cache_state 파일을 확인해보자.
그리고 globus-gass-cache -list를 통해 등록이 되어 있는지 살펴보자.
이렇게 되어 있으면 globus-job-get-output는 위의 cache를 통해 값을 얻어올 수 있다.
globusrun에서 -b 옵션을 통해 batch작업이 이루어지고 GASS에 대한 URL을 얻어 온다.
만약 위의 RSL 같이 stdout을 설정하지 않으면 GASS에 대한 URL을 얻어 오더라도
stdout의 기본설정인 /dev/null로 stdout이 날아가기 때문에
globus-job-get-output을 통해서 값을 못 얻는다.
Hello World 4 [[목차]]
이번에는 localhost와 sdd113에 동시에 Hello World를 호출하는 작업을 해보자.
jobA, jobB 이렇게 두개의 script를 먼저 작성 해보자.
$ vi jobA
#!/bin/csh -f
echo “”
echo -n “Hello World A on ” ; /usr/local/globus/bin/globus-hostname
:wq
$ vi jobB
#!/bin/csh -f
echo “”
echo -n “Hello World B on ” ; /usr/local/globus/bin/globus-hostname
:wq
$ chmod +x jobA jobB
jobA는 localhost에 jobB는 sdd113에 호출을 하기로 한다.
$ globus-job-run -: localhost ./jobA -: sdd113 -stage ./jobB
Hello World A on sdd47.hpcnet.ne.kr
Hello World A on sdd113.hpcnet.ne.kr
-: delimiter를 통해서 각 subjob들을 동시에 요청할 수 있게 된다.
파일 전송 [[목차]]
1.1.x에서 파일 전송을 위한 방법으로 Globus Access to Secondary Storage(GASS)을 사용했다.
2.0에서도 마찬가지로 GASS를 이용해서 원격지와 로컬의 데이터에 대한
쉬운 접근과 사용을 위한 프로그램과 C API를 제공한다.
하지만 여기에 덧붙여 GridFTP가 추가가 되었다.
(globus-rcp가 없어지고 GridFTP관련 유틸리티인 gsincftp를 사용할 수 있게 되었다.)
globus-gass-server
원격의 클라이언트에게 자원을 사용하고 있는 파일들을 사용할 수 있게 한다.
localhost(sdd47)에서 실행을 해보자.
$ globus-gass-server -t -u -r -w -c -o -e &
https://sdd47.hpcnet.ne.kr:38563
위와 같이 URL주소를 출력한다. 사용자는 위의 주소를 사용해서 자원을 얻게 된다.
https://hostname:port/~/file : a file from your home directory
https://hostname:port/./file : a file from the directory in which the globus-gass-server is running
https://hostname:port/tmp/file : a file with an absolute path
하지만 실제로 사용자가 서버를 띄우는 일보단 globus의 각 프로그램들이
자동으로 띄우는 일이 많다. 사용자가 서버를 수동으로 띄우는 경우에는
RSL 파일에서 $(GLOBUSRUN_GASS_URL) 대신 위의 주소를 직접 사용해야 된다.
즉 Hello World 3의 hello2.rsl을 다음과 같이 바꿀 수 있다.
$ more hello2.rsl
& (executable=”https://sdd47.hpcnet.ne.kr:38563/home/gfk/hello.sh”)
(arguments=”globus”)
참고 : globus-gass-server 옵션 중에서 -c는 붙이는게 좋다. 그래야, globus-gass-server-shutdown을 이용해서
GASS 서버가 중지될 수 있다. -c를 붙이지 않는 경우에는 kill을 이용해서
강제적으로 중지시켜야 한다.
만약, 위의 globus-rcp hello.sh sdd113:/home/globus/hello.sh 처럼 sdd47에서 sdd113의
GASS 서버를 이용하고 싶을때는 telnet sdd113으로 들어가서 globus-gass-server를 명령하면 안된다.
다음과 같이 globus-job-run을 이용해서 sdd47에서 실행해주어야 globus-url-copy를 이용할 수 있다.
$ globus-job-run sdd113 /usr/local/globus/tools/i686-pc-linux-gnu/bin/globus-gass-server -t -u -r -w -c -o -e &
https://sdd113.hpcnet.ne.kr:38563
sdd47에서 띄운 sdd113에 띄운 globus-gass-server를 멈추게 하기
위해선 다음과 같이 globus-gass-server-shutdown 스크립트를 이용해서
할수 있다.
$ globus-job-run sdd113 /usr/local/globus/tools/i686-pc-linux-gnu/bin/globus-gass-server-shutdown https://sdd113.hpcnet.ne.kr:38563
globus-url-copy
GASS 서버나 http, https, gsiftp, 로컬 파일 시스템으로 부터 자원을 접근해서 서로간에
파일을 옮기는 일을 한다.
$ more /home/globus/a.txt
hello
$ globus-url-copy https://sdd113.hpcnet.ne.kr:38563/home/globus/a.txt file:/tmp/a.txt
$ more /tmp/a.txt
hello
$ globus-url-copy gsiftp://sdd113.hpcnet.ne.kr/home/globus/a.txt file:/tmp/b.txt
$ more /tmp/b.txt
hello
파일에 대한 주소는 다음과 같은 문법으로 나타낸다. ~는 사용할 수 없다.
fullpath는 절대 주소이어야 되고 상대 주소는 사용이 안된다.
file:fullpath
예제) file:/home/globus/hello.sh
위와 같이 GASS 서버를 원격에서 사용자가 띄운후에 URL주소를 사용해서 하는 것보단
아래와 같이 globusrun을 이용해서 globus-gass-server를 자동으로 띄우는게 편하다.
sdd47(localhost)에서 sdd113의 파일을 가져와 보자.
$ hostname
sdd47.hpcnet.ne.kr
$ vi a.rsl
&(executable=”/usr/local/globus/tools/i686-pc-linux-gnu/bin/globus-url-copy”)
(arguments=”file:/home/globus/a.txt” $(GLOBUSRUN_GASS_URL)/tmp/a.txt)
$ globusrun -s -r sdd113 -f a.rsl
참고 : 로컬에 있는 hello.sh를 sdd113의 /home/globus/hello.sh에 globus-url-copy를 이용해서 복사해보자.
먼저, GASS 서버를 sdd113에 띄워서 복사하는 방법이다.
$ hostname
sdd47.hpcnet.ne.kr
$ pwd
/home/globus
$ globus-job-run sdd113 /usr/local/globus/tools/i686-pc-linux-gnu/bin/globus-gass-server -t -u -r -w -c -o -e &
https://sdd113.hpcnet.ne.kr:38563
$ globus-url-copy file:/home/globus/hello.sh https://sdd113.hpcnet.ne.kr:38563/home/globus/hello.sh
$ globus-job-run sdd113 /usr/local/globus/tools/i686-pc-linux-gnu/bin/globus-gass-server-shutdown \\
https://sdd113.hpcnet.ne.kr:38563
다음은 GridFTP를 이용해서 복사하는 방법이다.
$ hostname
sdd47.hpcnet.ne.kr
$ pwd
/home/globus
$ globus-url-copy file:/home/globus/hello.sh gsiftp://sdd113.hpcnet.ne.kr/home/globus/hello.sh
gsincftp, gsincftpget, gsincftpput
globus-rcp가 없어진 대신에 gsincftp관련 툴을 사용할 수 있게 되었다.
(gsincftp 클라이언트 설치법은 gridtest홈페이지에 있는 globus2.0설치법을 참고하기 바란다.)
로컬의 현재 디렉토리에 있는 hello.sh를 sdd113의 /home/globus/hello.sh로 복사해보자.
# gsincftpput remote-host remote-dir local-files …
$ gsincftpput sdd113.hpcnet.ne.kr /home/globus hello.sh
or
$ gsincftp sdd113.hpcnet.ne.kr
NcFTP 3.0.3 (April 15, 2001) by Mike Gleason (ncftp@ncftp.com).
Connecting to 150.183.234.113…
sdd107.hpcnet.ne.kr FTP server (GridFTP Server 1.0 [GSI patch v0.5] wu-2.6.1(2) Wed May 15 16:28:10 KST 2002) ready.
Logging in…
User globus logged in.
Logged in to sdd113.
ncftp /home/globus > put hello.sh
sdd113의 /home/globus/hello.sh를 로컬의 현재 디렉토리로 복사해보자.
$ rm hello.sh
# gsincftpget remote-host local-dir remote-path-names…
$ gsincftpget sdd113.hpcnet.ne.kr . /home/globus/hello.sh
or
$ gsincftp sdd113.hpcnet.ne.kr
NcFTP 3.0.3 (April 15, 2001) by Mike Gleason (ncftp@ncftp.com).
Connecting to 150.183.234.113…
sdd107.hpcnet.ne.kr FTP server (GridFTP Server 1.0 [GSI patch v0.5] wu-2.6.1(2) Wed May 15 16:28:10 KST 2002) ready.
Logging in…
User globus logged in.
Logged in to sdd113.
ncftp /home/globus > get hello.sh
MPICH-G2를 사용해보자. [[목차]]
두개의 머신(sdd47, sdd113)에 대해서 응답을 주고 받는 간단한 mpi프로그램을 가지고 테스트를 해보자.
참고문서 [[목차]]
1. Globus Toolkit 1.1.3 System Administration Guide, Dec. 2000
2. Globus Quick Start Guide for 1.1.3 and 1.1.4 June 2001
3. Mailing list discuss@globus.org
(http://www-unix.globus.org/mail_archive/discuss/threads.html)
3 Responses
… [Trackback]
[…] Read More Info here on that Topic: nblog.syszone.co.kr/archives/1809 […]
… [Trackback]
[…] Read More to that Topic: nblog.syszone.co.kr/archives/1809 […]
… [Trackback]
[…] Read More Info here on that Topic: nblog.syszone.co.kr/archives/1809 […]