Главная / Обучение / Практикум / Запуск заданий, требующих данные -- WMProxy интерфейс

Запуск заданий, требующих данные -- WMProxy интерфейс

JDL атрбуты InputSandbox и OutputSandbox являются самым простым способом передачи файлов между User Interface (UI) и Working Node (WN). Эти атрибуты и их использование описано на странице "Ещё о JDL атрибутах" Практикума. Однако существуют и другие способы передачи файлов на/c WN. Особенно это важно, когда передаются большие файлы (>10Mb), в этом случае этот способ передачи становится критическим для общей эффективности системы. Поэтому и существует ограничение на размер файлов, пердаваемых через этот механизм.

Data Requirements

Первый пример описывает JDL атрибут Data Requirements; этот атрибут представляет список из групп атрибутов, определяющих требования к файлам данных, с которыми работает задание. Каждая из групп содержит три атрибута: InputData, DataCatalog, DataCatalogType, которые соответственно представляют: список входных файлов, необходимых заданию; тип каталога данных, который будет использоваться для определения физических имён файлов и, наконец, URI каталога данных, если используется каталог, отличный от каталога, определённого по умолчанию для данной ВО. Наличие атрибута Data Requirements заставляет задание выполняться на том CE, который является ближайшим к SE, на котором хранятся требуемые файлы. Подробнее о том, как сохранять файл на SE, можно посмотреть здесь. Отметим, что этот атрибут не обеспечивает действительное копирование файлов с SE на WN, как мы увидим далее это должно выполнять само задание пользователя.

Вначале скопируем файл на SE и зарегистируем его его в Каталоге. Следует отметить, что имя, под которым файл будет зарегистрирован в каталоге будет содержать ваше локальное имя, как оно определено в переменной окружения $USER.

  $ echo "Hello World " > local_test.txt 
  $ lcg-cr  -l lfn:/grid/gilda/tutorials/testSE-CE-$USER.txt file:$PWD/local_test.txt
    guid:522950d4-a28a-48aa-939b-d85c9ab5443f
  

В аргументах JDL файла содержится LFN файла. *** Вам необходимо заменить cern18 на ваше имя пользователя ***.

  $ cat inputdata.jdl
[
        Executable = "/bin/sh";
        Arguments = "scriptInputData.sh lfn:/grid/gilda/tutorials/testSE-CE-cern18.txt";

        StdOutput = "std.out";
        StdError = "std.err";

        InputSandbox = "scriptInputData.sh";
        OutputSandbox = {"std.out","std.err"};

        DataRequirements = {
                [
                  InputData = {"lfn:/grid/gilda/tutorials/testSE-CE-cern18.txt"};
                  DataCatalogType = "DLI";
                  DataCatalog = "http://lfc-gilda.ct.infn.it:8085";
                ]
        };
        DataAccessProtocol = {"rfio","gsiftp"};

        RetryCount = 3;
]
  

Для собственно копирования файла с SE на WN скрипт использует команду lcg-cp. Потом скрипт проверяет, что файл корректно передался на WN и затем распечатываетего содержимое

  [giorgio@glite-tutor]$ cat scriptInputData.sh 
  #!/bin/sh

  # Set properly the environment
  export LFC_HOST=lfc-gilda.ct.infn.it
  export LCG_GFAL_INFOSYS=glite-rb.ct.infn.it:2170
  export LCG_CATALOG_TYPE=lfc

  # Download the file from the SE
  # note that the LFN is passed as input to this script
  lcg-cp --vo gilda $1 file:`pwd`/local_file

  echo "########################################"
  ls -la local_file
  echo "########################################"
  # type the file just donwloaded
  cat local_file
  

Теперь можно стандартным образом запустить скрипт на выполнение, проверить статус выполняемого задания, получить выходные параметры и проверить их. Если вы хотите запустить этот пример, вы должны создать два файла - inputdata.jdl и scriptInputData.sh, содержимое которых указано выше. Конечно, вы должны скопировать и зарегистрировать свой собственный файл и, соответственно, изменить LFN в атрибуте DataRequirements

Весь процесс будет выгдядеть примерно так:

  [giorgio@glite-tutor]$ glite-wms-job-submit -d $USER inputdata.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/QM7WNAPvPOx43z0MixHo2A

  ==========================================================================


  [giorgio@glite-tutor]$ glite-wms-job-status https://glite-rb3.ct.infn.it:9000/QM7WNAPvPOx43z0MixHo2A


  *************************************************************
  BOOKKEEPING INFORMATION:

  Status info for the Job : https://glite-rb3.ct.infn.it:9000/QM7WNAPvPOx43z0MixHo2A
  Current Status:     Scheduled 
  Status Reason:      Job successfully submitted to Globus
  Destination:        grid010.ct.infn.it:2119/jobmanager-lcgpbs-long
  Submitted:          Wed Oct 17 10:44:56 2007 CEST
  *************************************************************
  

Можно отметить, что заданию для выполнения назначен CE, который является "ближайшим" для SE, на котором хранится файл.

  [giorgio@glite-tutor]$ glite-wms-job-status https://glite-rb3.ct.infn.it:9000/QM7WNAPvPOx43z0MixHo2A


  *************************************************************
  BOOKKEEPING INFORMATION:

  Status info for the Job : https://glite-rb3.ct.infn.it:9000/QM7WNAPvPOx43z0MixHo2A
  Current Status:     Done (Success)
  Exit code:          0
  Status Reason:      Job terminated successfully
  Destination:        grid010.ct.infn.it:2119/jobmanager-lcgpbs-long
  Submitted:          Wed Oct 17 10:44:56 2007 CEST
  *************************************************************

  [giorgio@glite-tutor]$ glite-wms-job-output https://glite-rb3.ct.infn.it:9000/QM7WNAPvPOx43z0MixHo2A

  Connecting to the service https://193.206.208.138:7443/glite_wms_wmproxy_server


  ================================================================================

                        JOB GET OUTPUT OUTCOME

  Output sandbox files for the job:
  https://glite-rb3.ct.infn.it:9000/QM7WNAPvPOx43z0MixHo2A
  have been successfully retrieved and stored in the directory:
  /tmp/glite/glite-ui/giorgio_QM7WNAPvPOx43z0MixHo2A

  ================================================================================


  [giorgio@glite-tutor]$ cd /tmp/glite/glite-ui/giorgio_QM7WNAPvPOx43z0MixHo2A
  [giorgio@glite-tutor]$ cat std.out 
  ########################################
  -rw-r--r--    1 gilda003 gilda         139 Oct 17 12:35 local_file
  ########################################
  Hello World
  

Передача данных с WN на CE

А как поступать, если нужно передать данные с Worker Node на SE? Вероятно, Вы думаете, что можно в JDL файле в каком-либо атрибуте просто указать имя файла и LFN, а затем он автоматически будет передан на какой-либо SE и зарегистрирован в каталоге? Так, скорее всего и будет, но к сожалению, такая функциональность пока не реализована в WMProxy. Однако это может быть легко реализовано при помощи небольшого скрипта.

  $ cat  registeringfile-script.sh    
  #!/bin/sh 
  # Author : Emidio Giorgio 
  # Usage : register a file to the default SE, with a specified LFN  
  #  - The file to copy and register is passed as first input to the script ($1) 
  #  - The logical file name it will have is the second input  to the script ($2) 
  #  - the LFN will be so /grid/gilda/tutorials/$2   
  # Set properly the environment 
  export LFC_HOST=lfc-gilda.ct.infn.it 
  export LCG_GFAL_INFOSYS=glite-rb.ct.infn.it:2170 
  export LCG_CATALOG_TYPE=lfc  
  # Actually upload the file to the SE 
  # path to the file to be registered is built as {current path}/{relative path from this script to filename}  
  lcg-cr --vo gilda -l lfn:/grid/gilda/tutorials/$2  file:$PWD/$1 
  

Этот скрипт должен запускаться в конце выполнения вашего задания. Вы можете вызвать его из главного скрипта, который реализует основную функциональность задания, как это показано ниже. Не забудьте заменить выражение CHANGEME на что-то другое по вашему выбору и что будет являться логическим именем файла в директории /grid/gilda/tutorials/ каталога. Например что-то вроде *** /bin/sh registeringfile-script.sh fileout.txt cern18-WN2SE ****.

  cat  scriptWhichDoesSomething.sh 
  #!/bin/sh
  # do whatever  
  echo "This is a very dummy test" > fileout.txt  
  # run the script which registers the file fileout.txt just created above  
  /bin/sh registeringfile-script.sh fileout.txt CHANGEME  
  # greetings  
  echo "All done correctly (I hope). Bye bye"  

Основа JDL файла для запуска будет выглядеть примерно так:

  $ cat  JobWritingToSE.jdl 
  [         Executable = "/bin/sh";
            Arguments = "scriptWhichDoesSomething.sh";
            StdOutput = "std.out";
            StdError = "std.err";  
  # carry out also the script which registers the file
            InputSandbox = {"scriptWhichDoesSomething.sh","registeringfile-script.sh"};         
            OutputSandbox = {"std.out","std.err"}; 
  ] 
  

Конечно, можно просто вставить содержимое файла registeringfile-script.sh в основной скрипт. В качестве самостоятельной работы попробуйте реализовать этот способ передачи файлов таким образом. Получился ли результат таким, как вы его ожидали?


egee@pnpi.nw.ru

©2004-2010 ПИЯФ РАН им. Б.П.Константинова

СтатистикаСтатистика сайта