Задачи подготовки и выпуска заданий на вычислительных узлах пакетной службы

Задание пакетная служба Azure часто требует настройки перед выполнением его задач и после завершения выполнения заданий. Вам может понадобиться скачать входные данные общих задач на вычислительные узлы или отправить выходные данные задачи в службу хранилища Azure после завершения задания. Для этих операций можно использовать задачи подготовки и выпуска заданий .

  • Задача подготовки задания выполняется перед задачами задания на всех вычислительных узлах, для выполнения по крайней мере одной задачи.
  • Задача выпуска задания выполняется после завершения задания на каждом узле в пуле, на котором выполнялась задача подготовки задания.

Как и в случае с другими задачами пакетной службы, можно указать командную строку для вызова при выполнении задачи подготовки или выпуска задания. Задачи подготовки и выпуска заданий предлагают знакомые функции пакетных задач, такие как:

  • Скачивание файла ресурсов.
  • Выполнение с повышенными привилегиями.
  • Пользовательские переменные среды.
  • Максимальная длительность выполнения.
  • Число повторных попыток.
  • Время хранения файла.

В этой статье показано, как использовать классы JobPreparationTask и JobReleaseTask в библиотеке .NET пакетной службы .

Совет

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

Варианты использования задач подготовки и выпуска заданий

Задачи подготовки и выпуска заданий подходят для следующих сценариев:

  • Скачивание общих данных задачи. Пакетные задания часто требуют общий набор данных в качестве входных данных для задач задания. Задачу подготовки задания можно использовать для загрузки этих данных на каждый узел перед выполнением других задач задания.

    Например, в ежедневных вычислениях анализа рисков рыночные данные относятся к конкретным заданиям, но являются общими для всех задач в задании. Задачу подготовки задания можно использовать для загрузки этих рыночных данных, размер которых часто составляет несколько гигабайт, на каждый вычислительный узел, чтобы их могли использовать все задачи, выполняющиеся на узле.

  • Удаление выходных данных задания и задачи. В среде общего пула, где вычислительные узлы пула не списаны между заданиями, может потребоваться удалить данные заданий между запусками. Например, может потребоваться сэкономить место на диске на узлах или выполнить политики безопасности вашей организации. Задачу выпуска задания можно использовать для удаления данных, загруженных задачей подготовки задания или созданной задачей выполнения.

  • Сохранять журналы. Может потребоваться сохранить копию файлов журналов, создаваемых задачами, или файлов аварийного дампа, которые создаются неудачными приложениями. Задачу выпуска задания можно использовать для сжатия и отправки этих данных в учетную запись хранения Azure.

Задача подготовки задания

Перед выполнением задач задания пакетная служба выполняет задачу подготовки задания на каждом вычислительном узле, запланированном для выполнения задачи. По умолчанию пакетная служба ожидает завершения задачи подготовки задания перед выполнением запланированных задач задания, но вы можете настроить ее так, чтобы она не ждала.

Задача подготовки задания запускается на вычислительном узле снова при перезапуске узла, но это поведение также можно отключить. Если у вас есть задание с задачей подготовки задания и задачей диспетчера заданий, задача подготовки задания выполняется перед задачей диспетчера заданий и перед всеми другими задачами. Задача подготовки задания всегда выполняется в первую очередь.

Задача подготовки задания выполняется только на узлах, запланированных для выполнения задачи. Такое поведение предотвращает ненужные запуски на узлах, которым не назначены какие-либо задачи. Узлам могут не назначаться задачи, если количество задач задания меньше числа узлов в пуле. Это поведение также применяется при включенном параллельном выполнении задач , что оставляет некоторые узлы бездействующей, если число задач меньше общего числа возможных параллельных задач.

Примечание

JobPreparationTask отличается от CloudPool.StartTask тем, что JobPreparationTask выполняется в начале каждого задания, в то время как StartTask выполняется только тогда, когда вычислительный узел сначала присоединяется к пулу или перезапускается.

задачи снятия задания

После того как задание помечается как завершенное, задача выпуска задания выполняется на каждом узле в пуле, на котором выполнялась задача подготовки задания. Чтобы пометить задание как завершенное, нужно направить запрос прекращения. Этот запрос устанавливает состояние задания Прекращение и прекращает все активные или запущенные задачи, связанные с заданием, и запускает задачу снятия задания. Затем состояние задания меняется на Завершено .

Примечание

Задача снятия задания также выполняется при удалении задания. Однако если задание уже завершено, задача выпуска не выполняется повторно, если задание будет удалено позже.

Задачи выпуска заданий могут выполняться не более 15 минут, прежде чем пакетная служба их завершит. Дополнительные сведения см. в справочной документации REST API.

Задачи подготовки и выпуска заданий с помощью пакетной службы .NET

Чтобы выполнить задачу подготовки задания, назначьте объект JobPreparationTask свойству CloudJob.JobPreparationTask задания. Аналогичным образом инициализируйте задачу JobReleaseTask и назначьте ее свойству CloudJob.JobReleaseTask задания, чтобы запустить задачу снятия задания.

В следующем фрагменте myBatchClient кода является экземпляром BatchClient и myPool существующим пулом в учетной записи пакетной службы.

// Create the CloudJob for CloudPool "myPool"
CloudJob myJob =
    myBatchClient.JobOperations.CreateJob(
        "JobPrepReleaseSampleJob",
        new PoolInformation() { PoolId = "myPool" });

// Specify the command lines for the job preparation and release tasks
string jobPrepCmdLine =
    "cmd /c echo %AZ_BATCH_NODE_ID% > %AZ_BATCH_NODE_SHARED_DIR%\\shared_file.txt";
string jobReleaseCmdLine =
    "cmd /c del %AZ_BATCH_NODE_SHARED_DIR%\\shared_file.txt";

// Assign the job preparation task to the job
myJob.JobPreparationTask =
    new JobPreparationTask { CommandLine = jobPrepCmdLine };

// Assign the job release task to the job
myJob.JobReleaseTask =
    new JobReleaseTask { CommandLine = jobReleaseCmdLine };

await myJob.CommitAsync();

Задача выпуска задания выполняется при завершении или удалении задания. Вы завершаете задание с помощью JobOperations.TerminateJobAsync и удаляете задание с помощью JobOperations.DeleteJobAsync. Обычно задание завершается или удаляется по завершении его задач или при достижении определенного времени ожидания.

// Terminate the job to mark it as completed. Terminate initiates the
// job release task on any node that ran job tasks. Note that the
// job release task also runs when a job is deleted, so you don't
// have to call Terminate if you delete jobs after task completion.

await myBatchClient.JobOperations.TerminateJobAsync("JobPrepReleaseSampleJob");

Пример кода на GitHub

Чтобы просмотреть задачи подготовки и выпуска заданий в действии, выполните сборку и запуск примера проекта JobPrepRelease из GitHub. Это консольное приложение выполняет следующие действия:

  1. Создает пул с двумя узлами.
  2. Создает задание с задачами подготовки задания, снятия задания и стандартными задачами.
  3. Запускает задачу подготовки задания, которая сначала записывает идентификатор узла в текстовый файл в общем каталоге узла.
  4. Запускает на каждом узле задачу, которая записывает свой идентификатор в тот же текстовый файл.
  5. После завершения всех задач или достижения времени ожидания выводит содержимое текстового файла каждого узла в консоль.
  6. Запускает задачу выпуска задания, чтобы удалить файл из узла после завершения задания.
  7. Выводит коды выхода задач подготовки и выпуска заданий для каждого узла, на которых они запущены.
  8. Приостанавливает выполнение, чтобы подтвердить удаление задания или пула.

Выходные данные примера приложения аналогичны следующему примеру:

Attempting to create pool: JobPrepReleaseSamplePool
Created pool JobPrepReleaseSamplePool with 2 nodes
Checking for existing job JobPrepReleaseSampleJob...
Job JobPrepReleaseSampleJob not found, creating...
Submitting tasks and awaiting completion...
All tasks completed.

Contents of shared\job_prep_and_release.txt on tvm-2434664350_1-20160623t173951z:
-------------------------------------------
tvm-2434664350_1-20160623t173951z tasks:
  task001
  task004
  task005
  task006

Contents of shared\job_prep_and_release.txt on tvm-2434664350_2-20160623t173951z:
-------------------------------------------
tvm-2434664350_2-20160623t173951z tasks:
  task008
  task002
  task003
  task007

Waiting for job JobPrepReleaseSampleJob to reach state Completed
...

tvm-2434664350_1-20160623t173951z:
  Prep task exit code:    0
  Release task exit code: 0

tvm-2434664350_2-20160623t173951z:
  Prep task exit code:    0
  Release task exit code: 0

Delete job? [yes] no
yes
Delete pool? [yes] no
yes

Sample complete, hit ENTER to exit...

Примечание

Разное время создания и запуска узлов в новом пуле означает, что некоторые узлы готовы к выполнению задач раньше других, поэтому выходные данные могут отличаться. В частности, так как задачи выполняются быстро, на одном из узлов пула могут выполняться все задачи задания. В этом случае задачи подготовки и выпуска заданий не существуют для узла, на который не выполнялись задачи.

Просмотр задач подготовки и выпуска заданий в портал Azure

Вы можете использовать портал Azure для просмотра свойств и задач задания пакетной службы, включая задачи подготовки и выпуска заданий. На странице учетной записи пакетной службы выберите Задания в области навигации слева, а затем выберите задание. Если вы запускаете пример приложения, перейдите на страницу задания после завершения задач, но перед удалением задания и пула.

Ход выполнения и состояние задания можно отслеживать, разверните пункт Приблизительное число задач на странице Обзор задания или Задачи .

Снимок экрана: ход выполнения задачи задания в портал Azure.

На следующем снимке экрана показана страница JobPrepReleaseSampleJob после выполнения примера приложения. Это задание имеет задачи подготовки и выпуска, поэтому вы можете выбрать Задачи подготовки или Задачи выпуска в левой навигации, чтобы просмотреть их свойства.

Снимок экрана: свойства задачи выпуска задания в портал Azure.

Дальнейшие действия