Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Задача, выполняемая в пакетная служба Azure, может создавать выходные данные при выполнении. Часто необходимо сохранять данные результатов задач, чтобы другие задачи в задании, клиентское приложение, выполнявшее задание, или обе стороны могли их использовать. Задачи записывают выводные данные в файловую систему вычислительного узла Batch, но все данные на узле теряются, когда он восстанавливается из образа или когда узел покидает пул. Задачи также могут иметь период хранения файлов, после которого файлы, созданные задачей, удаляются. По этим причинам важно сохранить выходные данные задачи, которые потребуется позже в хранилище данных, например служба хранилища Azure.
Варианты учетной записи хранения в службе Batch смотрите в разделе Batch и учетные записи служба хранилища Azure.
Можно сохранять данные задач в пакетная служба Azure, используя библиотеку File Conventions для .NET. Библиотека соглашений о файлах упрощает процесс хранения и получения выходных данных задачи в служба хранилища Azure. Библиотеку соглашений о файлах можно использовать как в коде задачи, так и в клиентском коде. В режиме задачи используйте библиотеку для сохранения файлов. В режиме клиента используйте библиотеку для перечисления и извлечения файлов. Код задачи также может получить выходные данные вышестоящих задач с помощью библиотеки, например в сценарии зависимостей задач .
Чтобы получить выходные файлы с библиотекой соглашений о файлах, найдите файлы для задания или задачи. Вам не нужно знать имена или расположения файлов. Вместо этого можно перечислить файлы по идентификатору и назначению. Например, выведите список всех промежуточных файлов для данной задачи. Или получите предварительный просмотр файла для заданного задания.
Начиная с версии 2017-05-01 API службы Batch поддерживает сохранение выходных данных в хранилище Azure для задач и заданий диспетчера, выполняющихся в пулах, созданных с конфигурацией виртуальной машины (ВМ). Выходные данные можно сохранить в коде, создающем задачу. Этот метод является альтернативой библиотеке соглашений о файлах. Вы можете изменить клиентские приложения Batch так, чтобы сохранить данные о выполнении без необходимости обновлять приложение, в котором выполняется задача. Дополнительные сведения см. в статье Сохранение данных задачи в служба хранилища Azure с использованием API пакетной службы.
Варианты использования библиотеки
пакетная служба Azure предоставляет несколько способов сохранения выходных данных задачи. Используйте библиотеку соглашений о файлах, если вы хотите:
- Измените код приложения, на котором выполняется задача, чтобы сохранить файлы.
- Потоковая передача данных в служба хранилища Azure во время выполнения задачи.
- Сохранять данные из пулов.
- Найдите и скачайте выходные файлы задач по идентификатору или назначению в клиентском приложении или других задачах.
- Просмотр результатов задачи на портале Azure.
Для других сценариев может потребоваться рассмотреть другой подход. Дополнительные сведения о других параметрах см. в Сохранение заданий и выходных данных задач в служба хранилища Azure.
Что такое стандартные соглашения о пакетных файлах?
Стандарт Конвенция о пакетном файле предоставляет схему именования для контейнеров назначения и названий путей блобов, на которые записываются ваши выходные файлы. Файлы, сохраненные в хранилище Azure, которые соответствуют стандарту, automatically доступны для просмотра на портале Azure.
Библиотека соглашений о файлах для .NET автоматически присваивает имена контейнерам хранилища и выходным файлам задач в соответствии со стандартом. Библиотека также предоставляет методы для запроса выходных файлов в служба хранилища Azure. Можно запрашивать по идентификатору задания, идентификатору задачи или назначению.
Если вы разрабатываете язык, отличный от .NET, вы можете реализовать стандартные соглашения о файлах самостоятельно в приложении. Дополнительные сведения см. в разделе "Реализация стандартных соглашений о пакетном файле".
Подключите учетную запись служба хранилища Azure
Чтобы сохранить выходные данные в служба хранилища Azure с помощью библиотеки файловых соглашений, сначала свяжите учетную запись служба хранилища Azure с учетной записью Batch.
- Войдите на портал Azure.
- Найдите и выберите пакетную службу в строке поиска.
- Выберите учетную запись пакетной службы, чтобы связаться с служба хранилища Azure.
- На странице учетной записи Batch в разделе «Параметры» выберите «Учетная запись хранения».
- Если у вас еще нет учетной записи служба хранилища Azure, связанной с учетной записью пакетной службы, выберите Storage Account (None).
- Выберите учетную запись служба хранилища Azure для использования. Для повышения производительности используйте учетную запись в том же регионе, что и учетная запись пакетной службы.
Сохранение выходных данных
Вы можете сохранять выходные данные заданий и задач с помощью библиотеки соглашений о файлах. Сначала создайте контейнер в служба хранилища Azure. Затем сохраните выходные данные в контейнере. Используйте клиентскую библиотеку служба хранилища Azure для .NET в коде задачи, чтобы загрузить результаты задачи в контейнер.
Дополнительные сведения о работе с контейнерами и блоб-объектами в служба хранилища Azure см. в разделе Начало работы с хранилищем блоб-объектов Azure с использованием .NET.
Все выходные данные заданий и задач, сохраненные с помощью библиотеки соглашений о файлах, хранятся в одном контейнере. Если большое количество задач пытается сохранить файлы одновременно, ограничения на пропускную способность в служба хранилища Azure могут быть применены. Дополнительные сведения см. в контрольном списке производительности и масштабируемости для хранилища BLOB-объектов.
Создать контейнер для хранения
Чтобы сохранить выходные данные задачи в служба хранилища Azure, сначала создайте контейнер, вызвав CloudJob.PrepareOutputStorageAsync. Этот метод расширения принимает объект CloudStorageAccount в качестве параметра. Метод создает контейнер с именем в соответствии со стандартом файловых соглашений. Содержимое контейнера можно обнаружить на портале Azure и методах извлечения, описанных в этой статье.
Как правило, создайте контейнер в клиентском приложении, которое создает пулы, задания и задачи. Рассмотрим пример.
CloudJob job = batchClient.JobOperations.CreateJob(
"myJob",
new PoolInformation { PoolId = "myPool" });
// Create reference to the linked Azure Storage account
CloudStorageAccount linkedStorageAccount =
new CloudStorageAccount(myCredentials, true);
// Create the blob storage container for the outputs
await job.PrepareOutputStorageAsync(linkedStorageAccount);
Хранение выходных данных задач
После создания контейнера хранилища задачи могут сохранять выходные данные в контейнере с помощью TaskOutputStorage. Этот класс доступен в библиотеке File Conventions.
В коде задачи создайте объект TaskOutputStorage . Когда задача завершит работу, вызовите TaskOutputStorage. Метод SaveAsync . Этот шаг сохраняет выходные данные в служба хранилища Azure.
CloudStorageAccount linkedStorageAccount = new CloudStorageAccount(myCredentials);
string jobId = Environment.GetEnvironmentVariable("AZ_BATCH_JOB_ID");
string taskId = Environment.GetEnvironmentVariable("AZ_BATCH_TASK_ID");
TaskOutputStorage taskOutputStorage = new TaskOutputStorage(
linkedStorageAccount, jobId, taskId);
/* Code to process data and produce output file(s) */
await taskOutputStorage.SaveAsync(TaskOutputKind.TaskOutput, "frame_full_res.jpg");
await taskOutputStorage.SaveAsync(TaskOutputKind.TaskPreview, "frame_low_res.jpg");
Параметр kindTaskOutputStorage.Метод SaveAsync классифицирует сохраненные файлы. Существует четыре предопределенных типа TaskOutputKind: TaskOutput, TaskPreviewTaskLogи TaskIntermediate. вы также можете определить пользовательские категории выходных данных.
Укажите, какие типы данных выводить при дальнейшем запросе в Batch. Затем при перечислении выходных данных для задачи можно фильтровать по одному из типов выходных данных. Например, отфильтруйте значение "Дать мне предварительный просмотр выходных данных для задачи 109". Дополнительные сведения см. в разделе "Получение выходных данных".
Выходной тип также определяет, где отображается файл output на портале Azure. Файлы в категории TaskOutput находятся в выходных файлах задачи. Файлы категории TaskLog находятся под журналами задач.
Хранить результаты заданий
Вы также можете хранить выходные данные, связанные со всем заданием. Например, в задаче слияния задачи рендеринга фильма можно сохранить полностью отрендеренный фильм в качестве выходного результата. Когда задание завершится, клиентское приложение может вывести список и получить выходные данные для задания. Клиентское приложение не обязательно запрашивает отдельные задачи.
Сохраните выходные данные задания, вызвав метод JobOutputStorage.SaveAsync. Укажите jobOutputKind и имя файла. Рассмотрим пример.
CloudJob job = new JobOutputStorage(acct, jobId);
JobOutputStorage jobOutputStorage = job.OutputStorage(linkedStorageAccount);
await jobOutputStorage.SaveAsync(JobOutputKind.JobOutput, "mymovie.mp4");
await jobOutputStorage.SaveAsync(JobOutputKind.JobPreview, "mymovie_preview.mp4");
Как и в случае с типом TaskOutputKind для выходных данных задач, используйте тип JobOutputKind для классификации сохраненных файлов задания. Позже можно указать определенный тип выходных данных. Тип JobOutputKind включает как категории вывода, так и предварительного просмотра. Тип также поддерживает создание пользовательских категорий.
Хранение журналов задач
Также может потребоваться сохранить файлы, которые обновляются во время выполнения задачи. Например, может потребоваться сохранить файлы журнала, или stdout.txt и stderr.txt. Библиотека соглашений о файлах предоставляет метод TaskOutputStorage.SaveTrackedAsync для сохранения этих типов файлов. Отслеживайте обновления файла на узле с заданным интервалом с помощью SaveTrackedAsync. Затем сохраните эти обновления в служба хранилища Azure.
В следующем примере используется SaveTrackedAsync для обновления stdout.txt в служба хранилища Azure каждые 15 секунд во время выполнения задачи:
TimeSpan stdoutFlushDelay = TimeSpan.FromSeconds(3);
string logFilePath = Path.Combine(
Environment.GetEnvironmentVariable("AZ_BATCH_TASK_DIR"), "stdout.txt");
// The primary task logic is wrapped in a using statement that sends updates to
// the stdout.txt blob in Storage every 15 seconds while the task code runs.
using (ITrackedSaveOperation stdout =
await taskStorage.SaveTrackedAsync(
TaskOutputKind.TaskLog,
logFilePath,
"stdout.txt",
TimeSpan.FromSeconds(15)))
{
/* Code to process data and produce output file(s) */
// We are tracking the disk file to save our standard output, but the
// node agent may take up to 3 seconds to flush the stdout stream to
// disk. So give the file a moment to catch up.
await Task.Delay(stdoutFlushDelay);
}
Замените закомментированный раздел Code to process data and produce output file(s) любым кодом, который обычно выполняет ваша задача. Например, у вас может быть код, который загружает данные из служба хранилища Azure, а затем выполняет преобразования или вычисления. Этот код можно упаковать в using блок, чтобы периодически обновлять файл с помощью SaveTrackedAsync.
Агент узла — это программа, которая выполняется на каждом узле в пуле. Эта программа предоставляет интерфейс командной и управляемой между узлом и пакетной службой. Вызов Task.Delay требуется в конце этого using блока. Вызов гарантирует, что агент узла имеет время, чтобы удалить содержимое стандартного stdout.txt файла на узле. Без этой задержки можно пропустить последние несколько секунд выходных данных. Возможно, эта задержка не требуется для всех файлов.
При включении отслеживания файлов с помощью SaveTrackedAsync только добавления в отслеживаемый файл сохраняются в служба хранилища Azure. Этот метод используется только для отслеживания файлов журналов, не поворачивающихся, или других файлов, записываемых с помощью операций добавления в конец файла.
Получение выходных данных
Чтобы получить выходные файлы для определенной задачи или задания, вам не нужно знать путь в служба хранилища Azure или именах файлов. Вместо этого можно запросить выходные файлы по идентификатору задачи или задания.
В следующем примере кода выполняется итерацию задач задания. Затем код выводит некоторые сведения о выходных файлах для задачи. Затем код скачивает файлы из AzureStorage.
foreach (CloudTask task in myJob.ListTasks())
{
foreach (OutputFileReference output in
task.OutputStorage(storageAccount).ListOutputs(
TaskOutputKind.TaskOutput))
{
Console.WriteLine($"output file: {output.FilePath}");
output.DownloadToFileAsync(
$"{jobId}-{output.FilePath}",
System.IO.FileMode.Create).Wait();
}
}
Просмотр выходных файлов на портале Azure
Если выходные файлы задач используют стандартные соглашения Batch File Conventions, вы можете просмотреть файлы на портале Azure.
Чтобы включить отображение выходных файлов на портале, необходимо выполнить следующие требования:
Для автоматического отображения выходных файлов на портале Azure необходимо:
- Свяжите учетную запись служба хранилища Azure с вашей учетной записью Batch.
- Следуйте стандартным соглашениям об именовании для контейнеров и файлов служба хранилища Azure. Если для сохранения выходных данных используется библиотека соглашений , файлы сохраняются в соответствии со стандартом соглашений о файлах.
Чтобы просмотреть выходные файлы и журналы задач на портале Azure:
- Войдите на портал Azure.
- Перейдите к задаче, для которой требуется просмотреть выходные данные.
- Выберите сохраненные выходные файлы или сохраненные журналы.
Пример кода
Пример проекта PersistOutputs является одним из примеров кода пакетная служба Azure на GitHub. В этом Visual Studio решении показано, как использовать библиотеку соглашений о файлах пакетная служба Azure для сохранения выходных данных задач в устойчивом хранилище. Чтобы запустить пример, выполните следующие шаги:
- Откройте проект в Visual Studio 2019.
- Добавьте учетные данные учетной записи Batch и служба хранилища Azure в AccountSettings.settings в проекте Microsoft.Azure.Batch.Samples.Common.
- Создайте решение. Пока не запускайте решение.
- При появлении запроса восстановите все пакеты NuGet.
- Отправьте пакет application для PersistOutputsTask через портал Azure.
- Включите исполняемый
PersistOutputsTask.exeфайл и его зависимые сборки в пакет .zip. - Задайте для идентификатора
PersistOutputsTaskприложения значение . - Задайте для версии пакета приложения значение
1.0.
- Включите исполняемый
- Нажмите кнопку "Пуск ", чтобы запустить проект.
- При появлении запроса на выбор используемой технологии сохраняемости введите 1. Этот параметр запускает пример с помощью библиотеки соглашений о файлах для сохранения выходных данных задачи.
Получите библиотеку конвенций пакетных файлов для .NET
Библиотека соглашений о пакетном файле для .NET доступна в NuGet. Библиотека расширяет классы CloudJob и CloudTask новыми методами. Дополнительные сведения см. в справочной документации по библиотеке файловых соглашений.
Исходный код библиотеки File Conventions доступен в GitHub.
Дальнейшие действия
- Сохранять результаты заданий и задач в служба хранилища Azure
- Сохраните данные задачи в служба хранилища Azure с помощью API службы пакетной обработки.