Задания и задачи в службе Azure Batch

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

Работы

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

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

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

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

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

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

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

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

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

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

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

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

По умолчанию задания остаются в активном состоянии после выполнения всех задач в задании. Это поведение можно изменить, чтобы задание автоматически завершалось после выполнения всех входящих в него задач. Следует присвоить свойству onAllTasksComplete (OnAllTasksComplete в Batch .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 Storage перед выполнением командной строки задачи. Дополнительные сведения см. в разделах Задача запуска и Файлы и каталоги.

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

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

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

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

Примечание.

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

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

Начать задание

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

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

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

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

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

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

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

Примечание.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ваше клиентское приложение или служба могут получить переменные среды задачи, как определенные службой, так и пользовательские, с помощью операции Get information about a task (Batch REST) или через доступ к свойству CloudTask.EnvironmentSettings (Batch .NET). Процессы, которые выполняются на вычислительном узле, могут обращаться к этим и другим переменным среды узла, например с помощью привычного синтаксиса %VARIABLE_NAME% в Windows или $VARIABLE_NAME в Linux.

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

Известные ограничения

  • Задача зависла в состоянии выполнения: служба пакетной обработки работает вместе с вычислительными узлами для управления жизненным циклом задач. Когда задача запланирована на вычислительный узел для выполнения, вычислительный узел несет ответственность за обновление состояния задачи с выполнения до завершения. Если вычислительный узел прервали или если соединение с службой Batch потеряно, его задачи остаются в состоянии выполнения, пока служба Batch не сможет перезапустить их на другом вычислительном узле. Если нет другого вычислительного узла, эти задачи могут оставаться в состоянии выполнения навсегда. Чтобы определить, зависает ли задача в состоянии выполнения, можно запросить задачу, чтобы проверить, не используется ли связанный узел или удален из пула.
  • После завершения задания пакетная служба завершает выполнение задач только с доступными вычислительными узлами. Все существующие активные задачи и запущенные задачи с непригодными узлами сохраняют текущее состояние.
  • При повторном запросе задачи (например, из-за упреждающего узла или операции изменения размера пула с Requeue параметром), она отправляется обратно в конец очереди задания. Таким образом, возможно, задача откладывается на перепланированную работу, если в том же задании ожидаются другие активные задачи.

Следующие шаги