Поделиться через


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

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

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

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

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

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

Подсказка

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

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

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

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

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

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

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

Задача подготовки к работе

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

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

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

Примечание.

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.

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