Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Задача, выполняемая в Azure Batch, может создавать данные на выходе во время выполнения. Часто необходимо сохранять данные результатов задач, чтобы другие задачи в задании, клиентское приложение, выполнявшее задание, или обе стороны могли их использовать. Задачи записывают выводные данные в файловую систему вычислительного узла Batch, но все данные на узле теряются, когда он восстанавливается из образа или когда узел покидает пул. Задачи также могут иметь период хранения файлов, после которого файлы, созданные задачей, удаляются. По этим причинам важно сохранить вывод задачи, который понадобиться позже, в хранилище данных, например Azure Storage.
For storage account options in Batch, see Batch accounts and Azure Storage accounts.
Вы можете сохранять данные задач из пакетной службы Azure с помощью библиотеки соглашений о файлах для .NET. Библиотека соглашений о файлах упрощает хранение и получение выходных данных задач в службе хранилища Azure. Библиотеку соглашений о файлах можно использовать как в коде задачи, так и в клиентском коде. В режиме задачи используйте библиотеку для сохранения файлов. В режиме клиента используйте библиотеку для перечисления и извлечения файлов. Код задачи также может получить выходные данные вышестоящих задач с помощью библиотеки, например в сценарии зависимостей задач .
Чтобы получить выходные файлы с библиотекой соглашений о файлах, найдите файлы для задания или задачи. Вам не нужно знать имена или расположения файлов. Вместо этого можно перечислить файлы по идентификатору и назначению. Например, выведите список всех промежуточных файлов для данной задачи. Или получите предварительный просмотр файла для заданного задания.
Начиная с версии 2017-05-01 API пакетной службы поддерживает сохранение выходных данных в службе хранилища Azure для задач и задач диспетчера заданий, выполняемых в пулах, созданных с конфигурацией виртуальной машины. Выходные данные можно сохранить в коде, создающем задачу. Этот метод является альтернативой библиотеке соглашений о файлах. Вы можете изменить клиентские приложения Batch так, чтобы сохранить данные о выполнении без необходимости обновлять приложение, в котором выполняется задача. Для получения дополнительной информации, смотрите Persist task data to Azure Storage with the Batch service API.
Варианты использования библиотеки
Пакетная служба Azure предоставляет несколько способов сохранения выходных данных задачи. Используйте библиотеку соглашений о файлах, если вы хотите:
- Измените код приложения, на котором выполняется задача, чтобы сохранить файлы.
- Потоковая передача данных в службу хранилища Azure во время выполнения задачи.
- Сохранять данные из пулов.
- Найдите и скачайте выходные файлы задач по идентификатору или назначению в клиентском приложении или других задачах.
- Просмотр выходных данных задачи на портале Azure.
Для других сценариев может потребоваться рассмотреть другой подход. Дополнительные сведения о других параметрах см. в разделе "Сохранение выходных данных заданий и задач в Azure Storage".
Что такое стандартные соглашения о пакетных файлах?
Стандарт Конвенция о пакетном файле предоставляет схему именования для контейнеров назначения и названий путей блобов, на которые записываются ваши выходные файлы. Файлы, сохраненные в хранилище Azure, которые соответствуют стандарту , автоматически отображаются на портале Azure.
Библиотека соглашений о файлах для .NET автоматически присваивает имена контейнерам хранилища и выходным файлам задач в соответствии со стандартом. Библиотека также предоставляет методы для запроса выходных файлов в службе хранилища Azure. Можно запрашивать по идентификатору задания, идентификатору задачи или назначению.
Если вы разрабатываете язык, отличный от .NET, вы можете реализовать стандартные соглашения о файлах самостоятельно в приложении. Дополнительные сведения см. в разделе "Реализация стандартных соглашений о пакетном файле".
Подключите учетную запись хранения Azure
Чтобы сохранить результирующие данные в хранилище Azure с помощью библиотеки соглашений о файлах, сначала свяжите учетную запись хранения Azure с вашей учетной записью Batch.
- Войдите на портал Azure.
- Найдите и выберите пакетную службу в строке поиска.
- Выберите учетную запись пакетной службы, чтобы связаться с службой хранилища Azure.
- На странице учетной записи Batch в разделе «Параметры» выберите «Учетная запись хранения».
- Если у вас еще нет учетной записи хранения Azure, связанной с учетной записью пакетной службы, выберите учетную запись хранения (нет).
- Выберите учетную запись хранения Azure для использования. Для повышения производительности используйте учетную запись в том же регионе, что и учетная запись пакетной службы.
Сохранение выходных данных
Вы можете сохранять выходные данные заданий и задач с помощью библиотеки соглашений о файлах. Сначала создайте контейнер в службе хранилища Azure. Затем сохраните выходные данные в контейнере. Используйте клиентную библиотеку службы хранилища Azure для .NET в коде задачи, чтобы передать выходные данные задачи в контейнер.
Дополнительные сведения о работе с контейнерами и BLOB-объектами в службе хранилища Azure см. в статье "Начало работы с хранилищем BLOB-объектов 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". Дополнительные сведения см. в разделе "Получение выходных данных".
Тип выходных данных также определяет, где отображается выходной файл на портале 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 Storage.
В следующем примере 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
Если выходные файлы задач используют стандартные соглашения о пакетных файлах, вы можете просмотреть файлы на портале Azure.
Чтобы включить отображение выходных файлов на портале, необходимо выполнить следующие требования:
Для автоматического отображения выходных файлов на портале Azure необходимо:
- Свяжите учетную запись хранения Azure с учетной записью пакетной службы.
- Следуйте стандартным соглашениям об именовании для контейнеров и файлов службы хранилища Azure. Просмотрите README для всех определений. Если вы используете библиотеку соглашений о файлах для сохранения выходных данных, файлы сохраняются в соответствии со стандартом файловых соглашений.
Чтобы просмотреть выходные файлы и журналы задач на портале Azure, выполните следующие действия.
- Войдите на портал Azure.
- Перейдите к задаче, для которой требуется просмотреть выходные данные.
- Выберите сохраненные выходные файлы или сохраненные журналы.
Пример кода
The PersistOutputs sample project is one of the Azure Batch code samples on GitHub. В этом решении Visual Studio показано, как использовать библиотеку соглашений о пакетной службе Azure для сохранения выходных данных задач в устойчивом хранилище. Чтобы запустить пример, выполните следующие шаги:
- Open the project in Visual Studio 2019.
- Добавьте учетные данные учетной записи пакетной службы и учетной записи хранения Azure в AccountSettings.settings в проект Microsoft.Azure.Batch.Samples.Common .
- Создайте решение. Пока не запускайте решение.
- При появлении запроса восстановите все пакеты NuGet.
- Отправьте пакет приложения для PersistOutputsTask на портале Azure.
- Включите исполняемый
PersistOutputsTask.exeфайл и его зависимые сборки в пакет .zip. - Задайте для идентификатора
PersistOutputsTaskприложения значение . - Задайте для версии пакета приложения значение
1.0.
- Включите исполняемый
- Нажмите кнопку "Пуск ", чтобы запустить проект.
- При появлении запроса на выбор используемой технологии сохраняемости введите 1. Этот параметр запускает пример с помощью библиотеки соглашений о файлах для сохранения выходных данных задачи.
Получение библиотеки соглашений о пакетных файлах для .NET
Библиотека соглашений о пакетном файле для .NET доступна в NuGet. Библиотека расширяет классы CloudJob и CloudTask новыми методами. Дополнительные сведения см. в справочной документации по библиотеке файловых соглашений.
Исходный код библиотеки файловых соглашений доступен на сайте GitHub.