Интерфейс командной строки ГридННС. Инструкция пользователя

Оглавление

  1. Подготовка к работе
  2. Создание прокси-сертификата
  3. Запуск простой задачи
  4. Сервис GridFTP
  5. Запуск задания с компиляцией программы из исходных текстов с передачей входных данных и результата

Подготовка к работе

Перед началом работы необходимо разместить на сервере 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

После того как прокси-сертификат был успешно создан можно приступать к запуску задач.

Полезные ссылки:

Запуск простой задачи

В качестве простейшего примера запуска задач в ГридННС рассмотрим запуск команды /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.

Полезные ссылки:

Сервис 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.

Полезные ссылки:

Клиент 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

Теперь создадим описание задания, которое будет состоять из одной задачи. Задача должна

  1. передать на удаленный ресурс исходный текст программы, Makefile, сценарии компиляции и запуска и файл с входными данными;
  2. выполнить сценарий запуска;
  3. передать результат пользователю.
Вот описание такого задания на языке утилит Pilot:
{
        "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