Интерфейс командной строки ГридННС. Инструкция пользователя
Оглавление
- Подготовка к работе
- Создание прокси-сертификата
- Запуск простой задачи
- Сервис GridFTP
- Запуск задания с компиляцией программы из исходных текстов с передачей входных данных и результата
Подготовка к работе
Перед началом работы необходимо разместить на сервере ngui.grid.kiae.ru свой пользовательский сертификат. Для этого нужно создать в домашнем каталоге директорию .globus и поместить туда закрытый ключ (userkey.pem) и сертификат ГридННС (usercert.pem). Важно установить права на эти файлы, исключающие их чтение другими пользователями (например 0400). Сделать это можно командой:
[username@ngui ~]$ chmod 400 .globus/*.pem
Создание прокси-сертификата
Для запуска заданий в ГридННС вам понадобится прокси-сертификат. Создать его можно и с помощью программы для работы с сертификатами и сервисом MyProxy — Proxytool. Для того что бы создать прокси-сертификат необходимо выполнить следующую команду (понадобится ввести пароль к закрытому ключу):
[username@ngui ~]$ proxytool init Enter passphrase for private key:
Для того что бы проверить, что прокси-сертификат был удачно создан можно воспользоваться командой, которая выводит информацию о прокси-сертификате:
[username@ngui ~]$ proxytool info subject : /C=RU/O=NanoGrid/OU=users/OU=grid.kiae.ru/CN=User Name/CN=480936065 issuer : /C=RU/O=NanoGrid/OU=users/OU=grid.kiae.ru/CN=User Name identity : /C=RU/O=NanoGrid/OU=users/OU=grid.kiae.ru/CN=User Name type : RFC 3820 compliant impersonation proxy strength : 1024 bits origin : unknown path : /tmp/x509up_u1017 timeleft : 23:58:51
После того как прокси-сертификат был успешно создан можно приступать к запуску задач.
Полезные ссылки:
- Описание пакета Proxytool.
Запуск простой задачи
В качестве простейшего примера запуска задач в ГридННС рассмотрим запуск команды /bin/hostname средствами ГридННС. Для этого понадобится файл описания задания. Назовем его test.dag:
{
"version": 2,
"tasks": [ {
"id": "Job A",
"description": "test job A",
"filename": "a.jt" }]
}
Нам также понадобится файл описания задачи «Job A», который в нашем примере называется a.jt:
{
"version": 2,
"executable": "/bin/hostname"
}
Для запуска задания воспользуемся командой pilot-job-submit:
[username@ngui ~]$ pilot-job-submit task.dag Job was successfully submitted to Pilot service. Job URI: https://tb01.ngrid.ru:5053/jobs/ttR0Ieka/
После того как задание запущено можно получить информацию о задании с помощью команды pilot-job-info и URI задачи, который возвратила команда pilot-job-submit:
[username@ngui ~]$ pilot-job-info https://tb01.ngrid.ru:5053/jobs/ttR0Ieka/
Job information for https://tb01.ngrid.ru:5053/jobs/ttR0Ieka/:
* created: 'Wed Mar 17 17:19:43 2010 UTC'
* deleted: False
* expires: 'Wed Mar 24 17:19:43 2010 UTC'
* modified: 'Wed Mar 17 17:19:43 2010 UTC'
* operation:
[{'completed': 'Wed Mar 17 17:19:47 2010 UTC',
'created': 'Wed Mar 17 17:19:43 2010 UTC',
'id': '0c672a6c-bb03-493c-b3d6-36fe8c8e4149',
'op': 'start',
'success': True}]
* owner: '/C=RU/O=NanoGrid/OU=users/OU=grid.kiae.ru/CN=User Name'
* server_time: 'Wed Mar 17 17:20:54 2010 UTC'
* state:
[{'s': 'finished', 'ts': 'Wed Mar 17 17:20:16 2010 UTC'},
{'s': 'running', 'ts': 'Wed Mar 17 17:19:46 2010 UTC'},
{'s': 'new', 'ts': 'Wed Mar 17 17:19:43 2010 UTC'}]
* tasks: {'a': 'https://tb01.ngrid.ru:5053/jobs/ttR0Ieka/a/'}
Также можно получить информацию о статусе задания и отдельных подзадач (в данном примере имеется одна подзадача — «a») с помощью команд pilot-job-status и pilot-task-status:
[username@ngui ~]$ pilot-job-status https://tb01.ngrid.ru:5053/jobs/ttR0Ieka/ Job https://tb01.ngrid.ru:5053/jobs/ttR0Ieka/ is finished since Wed Mar 17 17:20:16 2010 UTC. [username@ngui ~]$ pilot-task-status https://tb01.ngrid.ru:5053/jobs/ttR0Ieka/a/ Task https://tb01.ngrid.ru:5053/jobs/ttR0Ieka/a/ is finished since Wed Mar 17 17:20:06 2010 UTC.
Полезные ссылки:
- Руководство по интерфейсу командной строки пакета Pilot;
- Руководство по синтаксису язык описания заданий и задач.
Сервис GridFTP
На узле ngui.grid.kiae.ru пользователям доступен сервис передачи данных GridFTP. У каждого пользователя в его каталоге есть символическая ссылка «gridftp», указывающая на некоторый каталог внутри файловой системы /gridftp. Все что вы выкладываете в дерево этого каталога оказывается доступно по GridFTP используя следующий базовый URL:
gsiftp://ngui.grid.kiae.ru/$HOME/your/file
Пример: если ваш домашний каталог называется /home/users/vasya, файл вы положили в ~/gridftp/somedir/file.txt, то URL этого файла со стороны GridFTP такой:
gsiftp://ngui.grid.kiae.ru/home/users/vasya/somedir/file.txt
Для передачи файлов пользователю доступны утилита globus-url-copy и GridFTP-клиент UberFTP.
Полезные ссылки:
- Пример сеанса работы с утилитой globus-url-copy.
- Руководство по использованию утилиты UberFTP.
Клиент UberFTP очень напоминает стандартный FTP-клиент командной строки, входящий в ОС Linux. Ниже приведен пример сеанса работы с GridFTP-сервером посредством этой утилиты.
[username@ngui ~]$ uberftp ngpipe.grid.kiae.ru 220 ngpipe.grid.kiae.ru GridFTP Server 3.15 (gcc32dbgpthr, 1222656151-78) [Globus Toolkit 4.2.1] ready. 230 User testnnn logged in. UberFTP> ls -rw-r--r-- 1 testnnn testnnn 124 Jul 15 15:06 .bashrc drwxr-xr-x 10 root root 4096 Jul 15 15:06 .. -rw-r--r-- 1 testnnn testnnn 1 Dec 2 18:41 c.stdout -rw------- 1 testnnn testnnn 89 Oct 15 19:19 .bash_history drwxrwxr-x 2 testnnn testnnn 4096 Jul 31 15:29 .gw_gridui001_6 -rw-r--r-- 1 testnnn testnnn 0 Dec 2 18:41 c.stderr -rw-r--r-- 1 testnnn testnnn 441 Mar 3 15:05 cat_stdout -rw-r--r-- 1 testnnn testnnn 176 Jul 15 15:06 .bash_profile -rw-r--r-- 1 testnnn testnnn 33 Jul 15 15:06 .bash_logout -rw-r--r-- 1 testnnn testnnn 132 Mar 3 15:05 cat_stderr drwx------ 5 testnnn testnnn 4096 Mar 5 22:33 . drwxrwxr-x 2 testnnn testnnn 4096 Jul 30 11:53 .gw_gridui001_69 drwx------ 271 testnnn testnnn 430080 Mar 17 20:43 .globus UberFTP> get c.stdout c.stdout: 1 bytes in 0.016899 Seconds (59.175 B/s) UberFTP> quit 221 Goodbye.
Запуск задания с компиляцией программы из исходных текстов с передачей входных данных и результата
Рассмотрим теперь чуть более сложный пример, когда у нас есть программа на компилируемом языке программирования, например на Си, которую мы хотим запустить с помощью ГридННС. Кроме того, необходимо передать программе файл с входными данными и получить от нее результат, который, для определенности, выводится на стандартный поток вывода (stdout)..
Для примера рассмотрим следующую простую программу на Си, которая читает содержимое файла in и выводит его на стандартный поток вывода:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *in = fopen("in", "r");
char buf[64];
if(in == NULL) {
perror("Can't open input file");
return(EXIT_FAILURE);
}
while(fgets(buf, 64, in)) {
printf("Output: %s", buf);
}
fclose(in);
return(EXIT_SUCCESS);
}
Поскольку архитектура и даже ОС на вычислительных узлах, где будет запускаться программа, может быть различной, ее необходимо компилировать непосредственно на узле, где она будет исполняться. Для этого напишем следующий Makefile:
t: test.c
$(CC) -o t test.c
Для вызова программы make и запуска откомпилированной программы воспользуемся shell-сценарием (назовем его start.sh):
#! /bin/sh make && ./t
Теперь создадим описание задания, которое будет состоять из одной задачи. Задача должна
- передать на удаленный ресурс исходный текст программы, Makefile, сценарии компиляции и запуска и файл с входными данными;
- выполнить сценарий запуска;
- передать результат пользователю.
{
"version": 2,
"description": "Simple GridNNS test to compile program with input files",
"default_storage_base": "gsiftp://ngui.grid.kiae.ru/home/users/username/test_task/",
"tasks": [
{
"id": "task1",
"definition": {
"version": 2,
"executable": "/bin/sh",
"arguments": ["start.sh"],
"input_files": {
"in": "in",
"Makefile": "Makefile",
"test.c": "test.c",
"start.sh": "start.sh"
},
"stdout": "task1.stdout",
"stderr": "task1.stderr"
}
}
]
}
Для того что бы файлы программы, Makefile, сценарий запуска и входящие данные были доступны по GridFTP, их необходимо разместить в каталоге ~/gridftp/test_task/. Тогда после запуска задания через pilot-job-submit и при удачном завершении задания в этом же каталоге появятся файлы с stdout и stderr программы: task1.stdout и task1.stderr.
Запускаем задачу:
$ pilot-job-submit test.js
Job was successfully submitted to Pilot service.
Job URI:
https://tb01.ngrid.ru:5053/jobs/ArvFsdpF/
Через некоторое время проверяем ее статус и видим, что она завершилась:
$ pilot-job-info https://tb01.ngrid.ru:5053/jobs/ArvFsdpF/
Job information for https://tb01.ngrid.ru:5053/jobs/ArvFsdpF/:
* created: 'Wed Mar 17 18:27:37 2010 UTC'
* deleted: False
* expires: 'Wed Mar 24 18:27:37 2010 UTC'
* modified: 'Wed Mar 17 18:27:37 2010 UTC'
* operation:
[{'completed': 'Wed Mar 17 18:27:43 2010 UTC',
'created': 'Wed Mar 17 18:27:37 2010 UTC',
'id': '96c07125-f40d-4c59-af5f-09b35f3ee3e3',
'op': 'start',
'success': True}]
* owner: '/C=RU/O=NanoGrid/OU=users/OU=grid.kiae.ru/CN=User Name'
* server_time: 'Wed Mar 17 18:27:57 2010 UTC'
* state:
[{'s': 'finished', 'ts': 'Wed Mar 17 18:28:16 2010 UTC'},
{'s': 'running', 'ts': 'Wed Mar 17 18:27:42 2010 UTC'},
{'s': 'new', 'ts': 'Wed Mar 17 18:27:37 2010 UTC'}]
* tasks: {'task1': 'https://tb01.ngrid.ru:5053/jobs/ArvFsdpF/task1/'}
Смотрим на содержимое файла с сохраненным потоком стандартного вывода:
$ cat task1.stdout cc -o t test.c Output: 1 Output: 2 Output: 3