[클러스터] 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)

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.