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


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

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

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

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

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

Количество состояний задачи

Операция Get "Подсчет задач" подсчитывает задачи по следующим состояниям:

  • Активный: задача, которая находится в очереди и готова к выполнению, но в настоящее время не назначена любому вычислительному узлу. Задача также active зависит от родительской задачи , которая еще не завершена.
  • Выполнение: задача, назначенная вычислительному узлу, но еще не завершена. Задача считается как running, когда её состояние либо preparing, либо running, как указано в Getсведениях об операции задачи.
  • Завершено: задача, которая больше не подходит для выполнения, так как она либо успешно завершена, либо завершена неудачно, а также исчерпала его ограничение повторных попыток.
  • Выполнено: задача, в которой результат выполнения задачи — это success. Batch определяет, выполнена ли задача успешно или завершилась ошибкой, проверяя TaskExecutionResult свойство executionInfo.
  • Неудавшийся: задача, в которой результат выполнения — failure.

В следующем примере кода .NET показано, как получить количество задач по состоянию.

var taskCounts = await batchClient.JobOperations.GetJobTaskCountsAsync("job-1");

Console.WriteLine("Task count in active state: {0}", taskCounts.Active);
Console.WriteLine("Task count in preparing or running state: {0}", taskCounts.Running);
Console.WriteLine("Task count in completed state: {0}", taskCounts.Completed);
Console.WriteLine("Succeeded task count: {0}", taskCounts.Succeeded);
Console.WriteLine("Failed task count: {0}", taskCounts.Failed);

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

Количество состояний узла

Операция подсчёта узлов в пуле считает вычислительные узлы по следующим состояниям в каждом пуле. Раздельные агрегированные счетчики предоставляются для выделенных узлов и Spot-узлов в каждом пуле.

  • Создание: виртуальная машина, выделенная Azure, которая еще не начала процесс присоединения к пулу.
  • Простой: вычислительный узел, доступный и в настоящее время не выполняющий никаких задач.
  • Покидание пула: узел, покидающий пул, либо из-за того, что пользователь явно удалил его, либо из-за изменения размеров пула или из-за автоматического уменьшения масштаба.
  • Вне сети: узел, который служба пакетной обработки не может использовать для планирования новых задач.
  • Изъят: Точечный узел, который был удален из пула, потому что Azure забрал виртуальную машину обратно. Узел preempted можно повторно инициализировать, когда доступна емкость Spot VM.
  • Перезагрузка: узел, который перезапускается.
  • Переустановка ОС: узел, где выполняется восстановление образа операционной системы.
  • Выполнение : узел, выполняющий одну или несколько задач (кроме начальной задачи).
  • Запуск: узел, в котором запускается пакетная служба.
  • StartTaskFailed: узел, в котором задача запуска завершилась сбоем после всех повторных попыток и waitForSuccess включена. Этот узел не может выполнять задачи.
  • Неизвестно: узел, который потерял связь со службой пакетной обработки данных и состояние которого неизвестно.
  • Неиспользуемый: узел, который не может использоваться для выполнения задачи из-за ошибок.
  • WaitingForStartTask: узел, на котором выполняется начальная задача, но waitForSuccess включен и еще не завершен.

В следующем фрагменте кода C# показано, как перечислить количество узлов для всех пулов в текущей учетной записи:

foreach (var nodeCounts in batchClient.PoolOperations.ListPoolNodeCounts())
{
    Console.WriteLine("Pool Id: {0}", nodeCounts.PoolId);

    Console.WriteLine("Total dedicated node count: {0}", nodeCounts.Dedicated.Total);

    // Get dedicated node counts in Idle and Offline states; you can get additional states.
    Console.WriteLine("Dedicated node count in Idle state: {0}", nodeCounts.Dedicated.Idle);
    Console.WriteLine("Dedicated node count in Offline state: {0}", nodeCounts.Dedicated.Offline);

    Console.WriteLine("Total Spot node count: {0}", nodeCounts.LowPriority.Total);

    // Get Spot node counts in Running and Preempted states; you can get additional states.
    Console.WriteLine("Spot node count in Running state: {0}", nodeCounts.LowPriority.Running);
    Console.WriteLine("Spot node count in Preempted state: {0}", nodeCounts.LowPriority.Preempted);
}

В следующем фрагменте кода C# показано, как перечислить количество узлов для заданного пула в текущей учетной записи.

foreach (var nodeCounts in batchClient.PoolOperations.ListPoolNodeCounts(new ODATADetailLevel(filterClause: "poolId eq 'testpool'")))
{
    Console.WriteLine("Pool Id: {0}", nodeCounts.PoolId);

    Console.WriteLine("Total dedicated node count: {0}", nodeCounts.Dedicated.Total);

    // Get dedicated node counts in Idle and Offline states; you can get additional states.
    Console.WriteLine("Dedicated node count in Idle state: {0}", nodeCounts.Dedicated.Idle);
    Console.WriteLine("Dedicated node count in Offline state: {0}", nodeCounts.Dedicated.Offline);

    Console.WriteLine("Total Spot node count: {0}", nodeCounts.LowPriority.Total);

    // Get Spot node counts in Running and Preempted states; you can get additional states.
    Console.WriteLine("Spot node count in Running state: {0}", nodeCounts.LowPriority.Running);
    Console.WriteLine("Spot node count in Preempted state: {0}", nodeCounts.LowPriority.Preempted);
}

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

Дальнейшие шаги