Интерфейс командной строки ГридННС. Инструкция пользователя
Оглавление
- Подготовка к работе
- Создание прокси-сертификата
- Запуск простой задачи
- Сервис 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