Задания и задачи в пакетной службе Azure

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

Задания

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

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

приоритет задания

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

Вы можете изменить приоритет задания, вызвав операцию обновления свойств задания в REST пакетной службы или изменив значение CloudJob.Priority в .NET пакетной службы. Значения приоритета варьируются от -1000 (самый низкий приоритет) до +1000 (наивысший приоритет).

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

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

Ограничения заданий

Вы можете задать некоторые ограничения для заданий.

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

Задачи и автоматическое завершение работы диспетчера заданий

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

По умолчанию задания остаются в активном состоянии после выполнения всех задач в задании. Это поведение можно изменить, чтобы задание автоматически завершалось после выполнения всех входящих в него задач. Для этого следует присвоить свойству onAllTasksComplete (OnAllTasksComplete в .NET пакетной службы) значение terminatejob*`.

Пакетная служба считает задание без задач заданием, все задачи которого выполнены. Поэтому этот параметр чаще всего используется с задачами диспетчера заданий. Если вы хотите использовать автоматическое завершение заданий без диспетчера заданий, необходимо сначала присвоить свойству onAllTasksComplete нового задания значение noaction. Значение terminatejob*` следует присваивать этому свойству только после добавления всех задач в задание.

Запланированные задания

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

Задания

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

При создании задачи можно указать следующее:

  • Командная строка задачи. Это командная строка, которая запускает приложение или сценарий на вычислительном узле.

    Следует отметить, что командная строка не выполняется на базе оболочки и поэтому не может автоматически использовать функции оболочки, например расширение переменных среды (в том числе PATH). Чтобы воспользоваться этими функциями, необходимо вызвать оболочку в командной строке. Это можно сделать путем запуска cmd.exe на узлах Windows или /bin/sh на узлах Linux.

    cmd /c MyTaskApplication.exe %MY_ENV_VAR%

    /bin/sh -c MyTaskApplication $MY_ENV_VAR

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

  • Файлы ресурсов, которые содержат данные для обработки. Эти файлы автоматически копируются в узел из хранилища BLOB-объектов в учетной записи хранения Azure перед выполнением командной строки задачи. Дополнительные сведения см. в разделах Задача запуска и Файлы и каталоги.

  • Переменные среды, необходимые для приложения. Дополнительные сведения см. в разделе Параметры среды для задач.

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

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

  • Ссылка на образ контейнера в Docker Hub или в частном реестре и дополнительные параметры для создания контейнера Docker, в котором выполняется задача на узле. Эти сведения указываются, только если пул настроен в конфигурации контейнера.

Примечание

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

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

Задача запуска

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

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

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

В задаче запуска также могут содержаться справочные данные, которые будут использоваться всеми задачами, выполняемыми на вычислительном узле. Например, командная строка задачи запуска может выполнять операцию robocopy, чтобы скопировать файлы приложения (указанные в качестве файлов ресурсов и скачанные на узел) из рабочего каталога задачи запуска в общую папку, а затем запустить MSI-файл или setup.exe.

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

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

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

Примечание

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

  1. Можно применить пакеты для распределения приложений или данных в каждом узле пула пакетной службы. Дополнительные сведения о пакетах приложений см. в статье Развертывание приложений на вычислительных узлах с помощью пакетов приложений пакетной службы.

  2. Можно вручную создать ZIP-архив с файлами приложения. Отправьте ZIP-архив в службу хранилища Azure как большой двоичный объект. Укажите ZIP-архив в качестве файла ресурсов для задачи запуска. Перед использованием командной строки для задачи запуска распакуйте архив из командной строки.

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

Задача диспетчера заданий

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

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

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

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

Задачи подготовки и завершения заданий.

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

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

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

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

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

Задачи с несколькими экземплярами

Задача с несколькими экземплярами — это задача, которая может выполняться на нескольких вычислительных узлах одновременно. С помощью задач с несколькими экземплярами можно включать высокопроизводительные вычислительные сценарии, такие как интерфейс передачи сообщений Message Passing Interface (MPI), которым необходимо несколько совместно выделенных вычислительных узлов для обработки одной рабочей нагрузки.

Дополнительные сведения о выполнении заданий задач с несколькими экземплярами в пакетной службе с использованием библиотеки .NET для пакетной службы см. в статье Использование задач с несколькими экземплярами для запуска приложений с интерфейсом передачи сообщений в пакетной службе Azure.

Зависимости задачи

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

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

С помощью зависимостей задач можно настраивать различные сценарии, например:

  • Задача taskB зависит от задачи taskA (выполнение задачи taskB не начнется, пока не завершится выполнение задачи taskA).
  • Задача taskC зависит от задач taskA и taskB.
  • Задача taskD зависит от ряда задач — от задачи 1 до задачи 10.

Дополнительные сведения см. в статье Зависимости задач в пакетной службе Azure и в примере кода TaskDependencies в репозитории azure-batch-samples на сайте GitHub.

Параметры среды для задач

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

Пользовательские переменные среды можно задать на уровне задачи или задания, задав свойство параметров среды для этих объектов. Дополнительные сведения см. в описании операции добавления задачи к заданию (в REST API пакетной службы) или свойств CloudTask.EnvironmentSettings и CloudJob.CommonEnvironmentSettings в .NET для пакетной службы.

Чтобы получить значения служебных и пользовательских переменных среды задачи для клиентского приложения или службы, можно использовать операцию получения сведений о задаче в REST для пакетной службы или свойство CloudTask.EnvironmentSettings в .NET для пакетной службы. Процессы, которые выполняются на вычислительном узле, могут обращаться к этим и другим переменным среды узла, например с помощью привычного синтаксиса %VARIABLE_NAME% в Windows или $VARIABLE_NAME в Linux.

Список всех служебных переменных среды см. в статье Переменные среды вычислительного узла пакетной службы Azure.

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