Запуск задания с использованием интерфейса WMS proxy
- Простейший JDL
- Делегирование полномочий(Credentials delegation)
- Получение списка ресурсов, доступных для запуска задания (Job List Match)
- Запуск задания (Job Submission)
- Статус задания (Job Status)
- Результаты выполнения задания (Job Output)
- Снятие задания (Job Cancel)
Этот практикум продемонстрирует этапы выполнения простого задания. Прежде чем продолжить, убедитесь, что у вас уже создан и ещё действителен прокси-сертификат, а если ещё нет, то создайте его. Посмотрите здесь, если вам необходима помощь.
Простейший JDL
Для того, чтобы передать задание на запуск Системе Управления Заданиями (Workload management System - WMS) используется текстовый файл, содержащий команды Языка Описания Задания (Job Description Language - JDL). JDL описывает само задание и необходимые требования и условия.
Ниже показан простейший JDL файл для запуска простого задания в Грид.
[catania41@glite-tutor Tutorial]$ cat hostname.jdl Type = "Job"; JobType = "Normal"; Executable = "/bin/hostname"; StdOutput = "hostname.out"; StdError = "hostname.err"; OutputSandbox = {"hostname.err","hostname.out"}; Arguments = "-f"; RetryCount = 7;
Атрибут Executable определяет команду, которая будет выполнена на Рабочем Узле (Worker Node - WN). Атрибут OutputSandbox перечисляет файлы, которые Вы хотите получить обратно после выполнения задания, обычно это файлы, куда перенаправляются вывод задания и сообщения об ошибках. Их имена определяются атрибутами StdOutput и StdError соответственно. Также, в случае какого-либо сбоя, определено количество повторных запусков.
Все последующие действия предполагают, что у вас уже создан такой JDL файл с именем hostname.jdl. Скопируйте и сохраните его с таким именем.
Делегирование полномочий (Credentials delegation)
Команды из этого раздела используют WMProxy - сервис, который взаимодействует с системой WMS от вашего имени.
Модель аутентификации для WM proxy определяет следующее: в дополнение к действующему прокси-сертификату (если он у вас ещё не создан, то посмотрите здесь ) вы должны делегировать свои полномочия WM proxy серверу.
Пользователь может определить идентификатор delegationId, который будет ассоциирован с назначенным делегированием при помощи опции --delegationid (сокращённо -d):
glite-wms-job-delegate-proxy -d myfirstdelegationid
Если используется опция -d, то разрешается делегирование и его имя сохраняется для того чтобы следующие вызовы glite-wms-job-submit или glite-wms-job-submit могли получить имя этого делегированния, не создавая нового. Таким образом, при вызове команд glite-wms-job-submit или glite-wms-job-submit необходимо будет указывать имя делегирования с опцией -d.
Вместо создания делегирования может быть использована опция -a, которая определяет автоматическое
делегирование. Когда используется эта опция, то нет необходимости вызывать glite-wms-job-delegate-proxy -d <userid>
,
но в этом случае вы должны будете указывать опцию -a при каждом вызове команд glite-wms-job-submit или
glite-wms-job-list-match. Однако такой способ при массовом использовании не рекомендуется, так как создание делегирования - это
достаточно затратный процесс, а в этом случае делегирование будет создаваться заново при каждом вызове подобных команд.
Поэтому лучше сделать это один раз при помощи команды glite-wms-job-delegate-proxy
и затем использовать его идентификатор.
Продолжая этот практикум, создадим делегирование для WMProxy, используя, как идентификатор, ваше пользовательское имя, которое можно получить из переменной окружения $USER.
[giorgio@glite-tutor giorgio]$ echo $USER giorgio
[giorgio@glite-tutor giorgio]$ glite-wms-job-delegate-proxy -d $USER Connecting to the service https://glite-rb3.ct.infn.it:7443/glite_wms_wmproxy_server ================== glite-wms-job-delegate-proxy Success ================== Your proxy has been successfully delegated to the WMProxy: https://glite-rb3.ct.infn.it:7443/glite_wms_wmproxy_server with the delegation identifier: giorgio ==========================================================================
Получение списка ресурсов, доступных для запуска задания (Job List Match)
JDL(Job Description Language) файл описывает задание, которое должно быть запущено. Прежде чем запустить задание, полезно проверить, какие Вычислительные Элементы (Computing Elements, CE's) могут принять задание для выполнения. Это можно сделать, используя команду glite-wms-job-list-match. Как мы уже видели, при помощи опции "-d" можно создать делегирование и назначить ему идентификатор. Поскольку мы использовали в качестве идентификатора пользовательское имя (полученное из $USER), оно и будет использовано в качестве значения опции для этой команды.
[giorgio@glite-tutor giorgio]$ glite-wms-job-list-match -d $USER hostname.jdl Connecting to the service https://glite-rb3.ct.infn.it:7443/glite_wms_wmproxy_server ========================================================================== COMPUTING ELEMENT IDs LIST The following CE(s) matching your job requirements have been found: *CEId* - ce-nano-37.to.infn.it:2119/jobmanager-lcgpbs-infinite - ce-nano-37.to.infn.it:2119/jobmanager-lcgpbs-long - ce-nano-37.to.infn.it:2119/jobmanager-lcgpbs-short - grid010.ct.infn.it:2119/jobmanager-lcgpbs-infinite - grid010.ct.infn.it:2119/jobmanager-lcgpbs-long - grid010.ct.infn.it:2119/jobmanager-lcgpbs-short - grid011f.cnaf.infn.it:2119/jobmanager-lcgpbs-infinite - grid011f.cnaf.infn.it:2119/jobmanager-lcgpbs-long - grid011f.cnaf.infn.it:2119/jobmanager-lcgpbs-short - iceage-ce-01.ct.infn.it:2119/jobmanager-lcgpbs-infinite - iceage-ce-01.ct.infn.it:2119/jobmanager-lcgpbs-long - iceage-ce-01.ct.infn.it:2119/jobmanager-lcgpbs-short ==========================================================================
Полученный список Вычислительных Элементов(CE) подтверждает, что в JDL файле нет синтаксических ошибок и что задание может быть запущено на одном или нескольких CE из списка.
Запуск задания (Job Submission)
Простое задание может быть запущено на выполнение при помощи команды
[giorgio@glite-tutor giorgio]$ glite-wms-job-submit -d $USER -o jobid hostname.jdl Connecting to the service https://glite-rb3.ct.infn.it:7443/glite_wms_wmproxy_server ====================== glite-wms-job-submit Success ====================== The job has been successfully submitted to the WMProxy Your job identifier is: https://glite-rb3.ct.infn.it:9000/rRRnnGoCyLRreXaySIQUIQ The job identifier has been saved in the following file: /home/giorgio/jobid ==========================================================================
Файл /home/giorgio/jobid определён, как выходной файл для процесса запуска. В него будет записан jodID(s) - уникальный идентификатор, возвращаемый в процессе запуска задания. Если будет запущено ещё одно задание (например просто повторите вызов команды), то его jobID будет дописан в выходной файл с таким именем. Попробуйте проверить это самостоятельно. После этой операции в файле /home/giorgio/jobid будут содержаться jobID уже для двух запущенных заданий
Статус задания (Job Status)
Для того чтобы получить информацию о статусе запущенного задания предусмотрена команда glite-wms-job-status. Эта команда запрашивает систему Регистрации (Logging and Bookkeeping, LB) о статусе каждого задания, чей идентификатор записан в файле, который указывается как входной параметр.
В том случае, если мы использовали файл jobid для сохранения идентификаторов задания (опция -o при запуске), выполнение команды происходит следующим образом:
[budapest31@glite-tutor2 budapest31]$ glite-wms-job-status -i jobid ---------------------------------------------------------------- 1: https://glite-rb3.ct.infn.it:9000/oNqZ-9WkDlNMOZBwwrWPMA 2 : https://glite-rb3.ct.infn.it:9000/TuubaTab7s6ehol9OTcO1g a : all q : quit ------------------------------------------------------------------ Choose one or more jobId(s) in the list - [1-2]all::a [giorgio@glite-tutor ~]$ glite-wms-job-status -i jobid ************************************************************* BOOKKEEPING INFORMATION: Status info for the Job : https://glite-rb3.ct.infn.it:9000/oNqZ-9WkDlNMOZBwwrWPMA Current Status: Done (Success) Logged Reason(s): - - Job terminated successfully Exit code: 0 Status Reason: Job terminated successfully Destination: grid010.ct.infn.it:2119/jobmanager-lcgpbs-short Submitted: Mon Jun 16 09:34:41 2008 CEST ************************************************************* ************************************************************* BOOKKEEPING INFORMATION: Status info for the Job : https://glite-rb3.ct.infn.it:9000/TuubaTab7s6ehol9OTcO1g Current Status: Running Status Reason: Job successfully submitted to Globus Destination: grid011f.cnaf.infn.it:2119/jobmanager-lcgpbs-short Submitted: Thu Sep 27 21:25:11 2007 CEST *************************************************************
На основании содержимого файла jobid выводит список выполняющихся заданий, чей статус может быть запрошен по отдельности или для всех заданий сразу. Опция -i определяет имя файла из которого команда считывает jobID для контроля статуса. В примере первое задание имеет статус Done (Success), второе - Running. Также отображается CE, определённый для выполнения задания.
В другом случае в качестве параметра можно указать не имя файла, а сам идентификатор задания, как это видно из следующего примера:
[ budapest31]$ glite-wms-job-status https://glite-rb3.ct.infn.it:9000/oNqZ-9WkDlNMOZBwwrWPMA ************************************************************* BOOKKEEPING INFORMATION: Status info for the Job : https://glite-rb3.ct.infn.it:9000/oNqZ-9WkDlNMOZBwwrWPMA Current Status: Done (Success) Logged Reason(s): - - Job terminated successfully Exit code: 0 Status Reason: Job terminated successfully Destination: grid010.ct.infn.it:2119/jobmanager-lcgpbs-short Submitted: Mon Jun 16 09:34:41 2008 CEST *************************************************************
Как видно, эта команда не требует идентификатора делегирования.
Результаты выполнения задания (Job Output)
Когда результат, возвращаемый командой glite-wms-job-status покажет, что задание успешно завершилось (статус Done (Success)), результат выполнения может быть получен при помощи команды glite-wms-job-output. В этом случае также не требуется указание идентификатора делегирования.
[budapest31@glite-tutor2 budapest31]$ glite-wms-job-output -i jobid ------------------------------------------------------------------ 1 : https://glite-rb3.ct.infn.it:9000/oNqZ-9WkDlNMOZBwwrWPMA 2 : https://glite-lb.ct.infn.it:9000/Q0PKPjXQUj_5PztedD5IsA a : all q : quit ------------------------------------------------------------------ Choose one or more jobId(s) in the list - [1-2]all (use , as separator or - for a range): 1 Connecting to the service https://glite-rb3.ct.infn.it:7443/glite_wms_wmproxy_server ================================================================================ JOB GET OUTPUT OUTCOME Output sandbox files for the job: https://glite-rb3.ct.infn.it:9000/oNqZ-9WkDlNMOZBwwrWPMA have been successfully retrieved and stored in the directory: /tmp/jobOutput/giorgio_oNqZ-9WkDlNMOZBwwrWPMA ================================================================================
В сообщении написано, что все результирующие файлы помещены в директорию /tmp/jobOutput/giorgio_oNqZ-9WkDlNMOZBwwrWPMA
Для того чтобы проверить результат выполнения нашего примера, выведите содержимое указанной директории и проверьте содержимое выходных файлов.
$ cd /tmp/jobOutput/giorgio_oNqZ-9WkDlNMOZBwwrWPMA $ ls -la total 12 drwxr-xr-x 2 giorgio users 4096 Jun 16 09:46 . drwxrwxrwt 20 root root 4096 Jun 16 09:46 .. -rw-r--r-- 1 giorgio users 0 Jun 16 09:46 hostname.err -rw-r--r-- 1 giorgio users 19 Jun 16 09:46 hostname.out $ cat hostname.out grid040.ct.infn.it $
Директория, куда будут помещены выходные файлы может быть указана при помощи опции --dir.
glite-wms-job-output -i jobid --dir jobdir ------------------------------------------------------------------ 1 : https://glite-rb3.ct.infn.it:9000/oNqZ-9WkDlNMOZBwwrWPMA 2 : https://glite-lb.ct.infn.it:9000/Q0PKPjXQUj_5PztedD5IsA a : all q : quit ------------------------------------------------------------------ Choose one or more jobId(s) in the list - [1-2]all (use , as separator or - for a range): 2 Connecting to the service https://glite-rb3.ct.infn.it:7443/glite_wms_wmproxy_server ================================================================================ JOB GET OUTPUT OUTCOME Output sandbox files for the job: https://glite-lb.ct.infn.it:9000/Q0PKPjXQUj_5PztedD5IsA have been successfully retrieved and stored in the directory: /home/giorgio/jobdir ================================================================================ $ ls -la jobdir/ total 12 drwxr-xr-x 2 giorgio users 112 Jun 16 09:49 . drwx------ 87 giorgio users 8536 Jun 16 09:49 .. -rw-r--r-- 1 giorgio users 0 Jun 16 09:49 testsandbox.err -rw-r--r-- 1 giorgio users 405 Jun 16 09:49 testsandbox.out
Снятие задания (Job Cancel)
Если что-либо выполняется не так, как хотелось, задание может быть снято командой glite-wms-job-cancel
[budapest31@glite-tutor2 budapest31]$ glite-wms-job-cancel -i jobid ------------------------------------------------------------------ 1 : https://glite-rb3.ct.infn.it:9000/DMx2JLLbkV6DofzRLG_sow 2 : https://glite-rb3.ct.infn.it:9000/TuubaTab7s6ehol9OTcO1g a : all q : quit ------------------------------------------------------------------ Choose one or more jobId(s) in the list - [1-2]all (use , as separator or - for a range): 1 Are you sure you want to remove specified job(s) [y/n]y : y Error - Cancel not allowed Current Job Status is Cleared
В данном случае задание не может быть снято, так как оно уже успешно завершилось и результаты его выполнения уже были получены. В этом случае выдаётся сообщение об ошибке. Снова можно использовать опцию -i (это особенно полезно, когда надо снять несколько заданий одной командой).