Руководство по Запуск параллельной рабочей нагрузки с помощью пакетной службы Azure с использованием .NET APITutorial: Run a parallel workload with Azure Batch using the .NET API

Используйте пакетную службу Azure, чтобы эффективно выполнять пакетные задания для крупномасштабных параллельных и высокопроизводительных вычислений (HPC).Use Azure Batch to run large-scale parallel and high-performance computing (HPC) batch jobs efficiently in Azure. В этом руководстве рассматривается пример C# для запуска параллельной рабочей нагрузки с помощью пакетной службы Azure.This tutorial walks through a C# example of running a parallel workload using Batch. Вы изучите общий рабочий процесс приложения пакетной службы и узнаете, как программно взаимодействовать с ресурсами пакетной службы и службы хранилища.You learn a common Batch application workflow and how to interact programmatically with Batch and Storage resources. Вы узнаете, как выполнять следующие задачи:You learn how to:

  • Добавление пакета приложения в учетную запись пакетной службы.Add an application package to your Batch account
  • Проверка подлинности с помощью учетных записей хранения и пакетной службы.Authenticate with Batch and Storage accounts
  • Передача входных файлов в хранилище.Upload input files to Storage
  • Создание пула вычислительных узлов для запуска приложения.Create a pool of compute nodes to run an application
  • Создание задания и задач для обработки входных файлов.Create a job and tasks to process input files
  • Мониторинг выполнения задач.Monitor task execution
  • Извлечение выходных файлов.Retrieve output files

В этом руководстве вы преобразовываете медиафайлы формата MP4 в формат MP3 с помощью инструмента с открытым кодом ffmpeg.In this tutorial, you convert MP4 media files in parallel to MP3 format using the ffmpeg open-source tool.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начать работу.If you don't have an Azure subscription, create a free account before you begin.

Предварительные требованияPrerequisites

Вход в AzureSign in to Azure

Войдите на портал Azure по адресу https://portal.azure.com.Sign in to the Azure portal at https://portal.azure.com.

Добавление пакета приложенияAdd an application package

Добавьте ffmpeg в учетную запись пакетной службы в качестве пакета приложений с помощью портала Azure.Use the Azure portal to add ffmpeg to your Batch account as an application package. Пакеты приложений упрощают управление приложениями задач и их развертывание на вычислительных узлах в пуле.Application packages help you manage task applications and their deployment to the compute nodes in your pool.

  1. На портале Azure выберите Дополнительные службы > Учетные записи пакетной службы и щелкните имя учетной записи пакетной службы.In the Azure portal, click More services > Batch accounts, and click the name of your Batch account.
  2. Выберите Приложения > Добавить.Click Applications > Add.
  3. В поле Идентификатор приложения введите ffmpeg и версию пакета 3.4.For Application id enter ffmpeg, and a package version of 3.4. Выберите файл zfmpeg zip, который вы загрузили ранее, и нажмите кнопку ОК.Select the ffmpeg zip file you downloaded previously, and then click OK. Пакет приложений ffmpeg добавляется в учетную запись пакетной службы.The ffmpeg application package is added to your Batch account.

Добавление пакета приложения

Получение учетных данных учетной записиGet account credentials

В этом примере нужно предоставить учетные данные для доступа к учетной записи службы хранилища и пакетной службы.For this example, you need to provide credentials for your Batch and Storage accounts. Проще всего получить необходимые учетные данные на портале Azure.A straightforward way to get the necessary credentials is in the Azure portal. (Можно также получить эти учетные данные с помощью API-интерфейсов Azure или средств командной строки.)(You can also get these credentials using the Azure APIs or command-line tools.)

  1. Выберите Все службы > Учетные записи пакетной службы и щелкните имя учетной записи пакетной службы.Select All services > Batch accounts, and then select the name of your Batch account.

  2. Для просмотра учетных данных пакетной службы нажмите Ключи.To see the Batch credentials, select Keys. Скопируйте значения учетной записи пакетной службы, URL-адреса, и первичного ключа доступа в текстовый редактор.Copy the values of Batch account, URL, and Primary access key to a text editor.

  3. Чтобы просмотреть имя и ключи учетной записи хранения, выберите Учетная запись хранения.To see the Storage account name and keys, select Storage account. Скопируйте значения имени учетной записи службы хранилища и Key1 в текстовый редактор.Copy the values of Storage account name and Key1 to a text editor.

Скачивание и запуск примера приложенияDownload and run the sample

Скачивание примера приложенияDownload the sample

Скачайте или клонируйте пример приложения с GitHub.Download or clone the sample app from GitHub. Чтобы клонировать пример репозитория приложения с клиентом Git, выполните следующую команду:To clone the sample app repo with a Git client, use the following command:

git clone https://github.com/Azure-Samples/batch-dotnet-ffmpeg-tutorial.git

Перейдите в каталог, в котором содержится файл решения Visual Studio BatchDotNetFfmpegTutorial.sln.Navigate to the directory that contains the Visual Studio solution file BatchDotNetFfmpegTutorial.sln.

Откройте файл решения в Visual Studio и замените строки учетных данных в Program.cs значениями, полученными для своих учетных записей.Open the solution file in Visual Studio, and update the credential strings in Program.cs with the values you obtained for your accounts. Например:For example:

// Batch account credentials
private const string BatchAccountName = "mybatchaccount";
private const string BatchAccountKey  = "xxxxxxxxxxxxxxxxE+yXrRvJAqT9BlXwwo1CwF+SwAYOxxxxxxxxxxxxxxxx43pXi/gdiATkvbpLRl3x14pcEQ==";
private const string BatchAccountUrl  = "https://mybatchaccount.mybatchregion.batch.azure.com";

// Storage account credentials
private const string StorageAccountName = "mystorageaccount";
private const string StorageAccountKey  = "xxxxxxxxxxxxxxxxy4/xxxxxxxxxxxxxxxxfwpbIC5aAWA8wDu+AFXZB827Mt9lybZB1nUcQbQiUrkPtilK5BQ==";

Примечание

Для упрощения примера учетные данные пакетной службы и службы хранения указаны в виде текста.To simplify the example, the Batch and Storage account credentials appear in clear text. На практике мы рекомендуем ограничить доступ к учетным данным и ссылаться на них в коде, используя переменные среды или файл конфигурации.In practice, we recommend that you restrict access to the credentials and refer to them in your code using environment variables or a configuration file. См. репозиторий с примерами кода для пакетной службы Azure.For examples, see the Azure Batch code samples repo.

Кроме того, убедитесь, что ссылка на пакет приложения ffmpeg в решении совпадает с идентификатором и версией пакета ffmpeg, который вы отправили в свою учетную запись.Also, make sure that the ffmpeg application package reference in the solution matches the Id and version of the ffmpeg package that you uploaded to your Batch account.

const string appPackageId = "ffmpeg";
const string appPackageVersion = "3.4";

Создание и запуск примера проектаBuild and run the sample project

Создавайте и запускайте приложения в Visual Studio или с помощью команд dotnet build и dotnet run в командной строке.Build and run the application in Visual Studio, or at the command line with the dotnet build and dotnet run commands. После запуска приложения просмотрите код, чтобы узнать, как работает каждый компонент приложения.After running the application, review the code to learn what each part of the application does. Visual Studio:For example, in Visual Studio:

  • Щелкните правой кнопкой мыши решение в обозревателе решений и выберите Build Solution (Сборка решения).Right-click the solution in Solution Explorer and click Build Solution.

  • Подтвердите восстановление пакетов NuGet, если появится соответствующий запрос.Confirm the restoration of any NuGet packages, if you're prompted. Если вам необходимо скачать отсутствующие пакеты, установите диспетчер пакетов NuGet.If you need to download missing packages, ensure the NuGet Package Manager is installed.

Затем запустите его.Then run it. Когда вы запустите пример приложения, консоль будет выглядеть так.When you run the sample application, the console output is similar to the following. Во время выполнения может возникнуть пауза на этапе Monitoring all tasks for 'Completed' state, timeout in 00:30:00..., когда будут запускаться вычислительные узлы пула.During execution, you experience a pause at Monitoring all tasks for 'Completed' state, timeout in 00:30:00... while the pool's compute nodes are started.

Sample start: 11/19/2018 3:20:21 PM

Container [input] created.
Container [output] created.
Uploading file LowPriVMs-1.mp4 to container [input]...
Uploading file LowPriVMs-2.mp4 to container [input]...
Uploading file LowPriVMs-3.mp4 to container [input]...
Uploading file LowPriVMs-4.mp4 to container [input]...
Uploading file LowPriVMs-5.mp4 to container [input]...
Creating pool [WinFFmpegPool]...
Creating job [WinFFmpegJob]...
Adding 5 tasks to job [WinFFmpegJob]...
Monitoring all tasks for 'Completed' state, timeout in 00:30:00...
Success! All tasks completed successfully within the specified timeout period.
Deleting container [input]...

Sample end: 11/19/2018 3:29:36 PM
Elapsed time: 00:09:14.3418742

Перейдите в учетную запись пакетной службы на портале Azure, чтобы отследить пул, вычислительные узлы, задания и задачи.Go to your Batch account in the Azure portal to monitor the pool, compute nodes, job, and tasks. Например, чтобы увидеть тепловую карту вычислительных узлов в вашем пуле, выберите Пулы > WinFFmpegPool.For example, to see a heat map of the compute nodes in your pool, click Pools > WinFFmpegPool.

Во время выполнения задач тепловая карта выглядит следующим образом:When tasks are running, the heat map is similar to the following:

Тепловая карта пула

Обычное время выполнения — примерно 10 минут, если для приложения задана конфигурация по умолчанию.Typical execution time is approximately 10 minutes when you run the application in its default configuration. Для создания пула потребуется больше всего времени.Pool creation takes the most time.

Извлечение выходных файловRetrieve output files

Портал Azure можно использовать для скачивания выходных MP3-файлов, созданных задачами ffmpeg.You can use the Azure portal to download the output MP3 files generated by the ffmpeg tasks.

  1. Выберите Все службы > Учетные записи службы хранилища и щелкните имя учетной записи службы хранилища.Click All services > Storage accounts, and then click the name of your storage account.
  2. Щелкните Большие двоичные объекты > Вывод.Click Blobs > output.
  3. Щелкните правой кнопкой мыши один из выходных MP3-файлов и нажмите кнопку Загрузить.Right-click one of the output MP3 files and then click Download. Следуйте инструкциям в браузере, чтобы открыть или сохранить этот файл.Follow the prompts in your browser to open or save the file.

Скачивание выходного файла

Хотя это не показано в этом примере, файлы можно также скачать программным способом из вычислительных узлов или контейнера хранилищ.Although not shown in this sample, you can also download the files programmatically from the compute nodes or from the storage container.

Просмотр кодаReview the code

В следующих разделах мы разобьем пример приложения на действия, выполняемые для обработки рабочей нагрузки в пакетной службе.The following sections break down the sample application into the steps that it performs to process a workload in the Batch service. Во время работы с оставшейся частью статьи сверяйтесь с файлом Program.cs в решении, так как в примере рассматриваются не все строки кода.Refer to the file Program.cs in the solution while you read the rest of this article, since not every line of code in the sample is discussed.

Проверка подлинности клиентов больших двоичных объектов и пакетной службыAuthenticate Blob and Batch clients

Чтобы взаимодействовать со связанной учетной записью хранения, приложение использует клиентскую библиотеку службы хранилища для .NET.To interact with the linked storage account, the app uses the Azure Storage Client Library for .NET. Оно создает ссылку на учетную запись с CloudStorageAccount, выполняя проверку подлинности с помощью общего ключа.It creates a reference to the account with CloudStorageAccount, authenticating using shared key authentication. Затем оно создает CloudBlobClient.Then, it creates a CloudBlobClient.

// Construct the Storage account connection string
string storageConnectionString = String.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}",
                                StorageAccountName, StorageAccountKey);

// Retrieve the storage account
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);

CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

Приложение создает объект BatchClient для создания пулов, заданий и задач в пакетной службе, а также для управления ими.The app creates a BatchClient object to create and manage pools, jobs, and tasks in the Batch service. В примере клиент пакетной службы использует проверку подлинности с общим ключом.The Batch client in the sample uses shared key authentication. Пакетная служба Azure также поддерживает аутентификацию отдельных пользователей или автоматических приложений с помощью Azure Active Directory.Batch also supports authentication through Azure Active Directory to authenticate individual users or an unattended application.

BatchSharedKeyCredentials sharedKeyCredentials = new BatchSharedKeyCredentials(BatchAccountUrl, BatchAccountName, BatchAccountKey);

using (BatchClient batchClient = BatchClient.Open(sharedKeyCredentials))
...

Передача входных файловUpload input files

Приложение передает объект blobClient методу CreateContainerIfNotExistAsync, чтобы создать контейнер для хранения входных файлов (формат MP4) и контейнер для выходных данных задач.The app passes the blobClient object to the CreateContainerIfNotExistAsync method to create a storage container for the input files (MP4 format) and a container for the task output.

CreateContainerIfNotExistAsync(blobClient, inputContainerName);
CreateContainerIfNotExistAsync(blobClient, outputContainerName);

Затем файлы передаются в контейнер входных данных из локальной папки InputFiles.Then, files are uploaded to the input container from the local InputFiles folder. Файлы в хранилище определяются как объекты пакетной службы ResourceFile, которые она может впоследствии скачать на вычислительные узлы.The files in storage are defined as Batch ResourceFile objects that Batch can later download to compute nodes.

При загрузке файлов задействованы два метода из Program.cs.Two methods in Program.cs are involved in uploading the files:

  • UploadFilesToContainerAsync: возвращает коллекцию объектов ResourceFile и выполняет внутренний вызов UploadResourceFileToContainerAsync, чтобы отправить каждый файл, переданный в параметре inputFilePaths.UploadFilesToContainerAsync: Returns a collection of ResourceFile objects and internally calls UploadResourceFileToContainerAsync to upload each file that is passed in the inputFilePaths parameter.
  • UploadResourceFileToContainerAsync: загружает каждый файл в качестве большого двоичного объекта в контейнер входных данных.UploadResourceFileToContainerAsync: Uploads each file as a blob to the input container. После отправки файла метод получает подписанный URL-адрес (SAS) для большого двоичного объекта и возвращает объект ResourceFile, который его представляет.After uploading the file, it obtains a shared access signature (SAS) for the blob and returns a ResourceFile object to represent it.
string inputPath = Path.Combine(Environment.CurrentDirectory, "InputFiles");

List<string> inputFilePaths = new List<string>(Directory.GetFileSystemEntries(inputPath, "*.mp4",
    SearchOption.TopDirectoryOnly));

List<ResourceFile> inputFiles = await UploadFilesToContainerAsync(
  blobClient,
  inputContainerName,
  inputFilePaths);

Подробнее о загрузке файлов в качестве больших двоичных объектов в учетную запись хранения с .NET см. в статье об отправке, скачивании и перечислении больших двоичных объектов с помощью .NET.For details about uploading files as blobs to a storage account with .NET, see Upload, download, and list blobs using .NET.

Создание пула вычислительных узловCreate a pool of compute nodes

Затем в учетной записи пакетной службы создается пул вычислительных узлов с помощью вызова CreatePoolIfNotExistAsync.Next, the sample creates a pool of compute nodes in the Batch account with a call to CreatePoolIfNotExistAsync. С помощью метода BatchClient.PoolOperations.CreatePool можно настроить количество узлов, размер виртуальной машины и конфигурацию пула.This defined method uses the BatchClient.PoolOperations.CreatePool method to set the number of nodes, VM size, and a pool configuration. Объект VirtualMachineConfiguration указывает ImageReference в образе Windows Server, опубликованном в Azure Marketplace.Here, a VirtualMachineConfiguration object specifies an ImageReference to a Windows Server image published in the Azure Marketplace. Пакетная служба Azure поддерживает широкий спектр образов виртуальной машины в Azure Marketplace, а также пользовательских образов виртуальной машины.Batch supports a wide range of VM images in the Azure Marketplace, as well as custom VM images.

Количество узлов и размер виртуальной машины настраиваются с помощью определенных констант.The number of nodes and VM size are set using defined constants. Пакетная служба Azure поддерживает выделенные узлы и узлы с низким приоритетом. Вы можете использовать их в своих пулах.Batch supports dedicated nodes and low-priority nodes, and you can use either or both in your pools. Выделенные узлы зарезервированы для пула.Dedicated nodes are reserved for your pool. Низкоприоритетные узлы предлагаются по сниженной цене с учетом избыточных ресурсов виртуальной машины в Azure.Low-priority nodes are offered at a reduced price from surplus VM capacity in Azure. Эти узлы становятся недоступны, если в Azure недостаточно ресурсов.Low-priority nodes become unavailable if Azure does not have enough capacity. Пример по умолчанию создает пул, содержащий только 5 низкоприоритетных узлов размером Standard_A1_v2.The sample by default creates a pool containing only 5 low-priority nodes in size Standard_A1_v2.

Приложение ffmpeg развертывается на вычислительных узлах, добавляя ApplicationPackageReference к конфигурации пула.The ffmpeg application is deployed to the compute nodes by adding an ApplicationPackageReference to the pool configuration.

Метод CommitAsync отправляет пул в пакетную службу.The CommitAsync method submits the pool to the Batch service.

ImageReference imageReference = new ImageReference(
    publisher: "MicrosoftWindowsServer",
    offer: "WindowsServer",
    sku: "2016-Datacenter-smalldisk",
    version: "latest");

VirtualMachineConfiguration virtualMachineConfiguration =
    new VirtualMachineConfiguration(
    imageReference: imageReference,
    nodeAgentSkuId: "batch.node.windows amd64");

pool = batchClient.PoolOperations.CreatePool(
    poolId: poolId,
    targetDedicatedComputeNodes: DedicatedNodeCount,
    targetLowPriorityComputeNodes: LowPriorityNodeCount,
    virtualMachineSize: PoolVMSize,
    virtualMachineConfiguration: virtualMachineConfiguration);

pool.ApplicationPackageReferences = new List<ApplicationPackageReference>
    {
    new ApplicationPackageReference {
    ApplicationId = appPackageId,
    Version = appPackageVersion}};

await pool.CommitAsync();  

создать задание;Create a job

Пакетное задание указывает пул для запуска задач и дополнительные параметры, такие как приоритет и расписание работы.A Batch job specifies a pool to run tasks on and optional settings such as a priority and schedule for the work. Пример создает задание путем вызова CreateJobAsync.The sample creates a job with a call to CreateJobAsync. С помощью метода BatchClient.JobOperations.CreateJob можно создать задание в пуле.This defined method uses the BatchClient.JobOperations.CreateJob method to create a job on your pool.

Метод CommitAsync отправляет задание в пакетную службу.The CommitAsync method submits the job to the Batch service. Изначально у задания нет задач.Initially the job has no tasks.

CloudJob job = batchClient.JobOperations.CreateJob();
job.Id = JobId;
job.PoolInformation = new PoolInformation { PoolId = PoolId };

await job.CommitAsync();

Создание задачCreate tasks

Пример создает задачи в задании путем вызова метода AddTasksAsync, который создает список объектов CloudTask.The sample creates tasks in the job with a call to the AddTasksAsync method, which creates a list of CloudTask objects. Каждый CloudTask запускает ffmpeg для обработки объекта входных данных ResourceFile с помощью свойства CommandLine.Each CloudTask runs ffmpeg to process an input ResourceFile object using a CommandLine property. ffmpeg был ранее установлен на каждом узле при создании пула.ffmpeg was previously installed on each node when the pool was created. В командной строке выполняется ffmpeg для преобразования каждого входного файла MP4 (видео) в файл MP3 (аудио).Here, the command line runs ffmpeg to convert each input MP4 (video) file to an MP3 (audio) file.

В примере создается объект OutputFile для файла MP3 после запуска командной строки.The sample creates an OutputFile object for the MP3 file after running the command line. Выходные файлы каждой задачи (в этом случае один) передаются в контейнер в связанной учетной записи с помощью свойства задачи OutputFiles.Each task's output files (one, in this case) are uploaded to a container in the linked storage account, using the task's OutputFiles property. Ранее в примере кода был получен подписанный URL-адрес (outputContainerSasUrl), чтобы предоставить доступ на запись к выходному контейнеру.Previously in the code sample, a shared access signature URL (outputContainerSasUrl) was obtained to provide write access to the output container. Обратите внимание на набор условий в объекте outputFile.Note the conditions set on the outputFile object. Выходной файл из задачи передается в контейнер только после успешного завершения задачи (OutputFileUploadCondition.TaskSuccess).An output file from a task is only uploaded to the container after the task has successfully completed (OutputFileUploadCondition.TaskSuccess). Ознакомьтесь с полным примером кода на сайте GitHub для получения дальнейших сведений о реализации.See the full code sample on GitHub for further implementation details.

Затем в примере к заданию добавляются задачи с помощью метода AddTaskAsync, который ставит их в очередь для запуска на вычислительных узлах.Then, the sample adds tasks to the job with the AddTaskAsync method, which queues them to run on the compute nodes.

 // Create a collection to hold the tasks added to the job.
List<CloudTask> tasks = new List<CloudTask>();

for (int i = 0; i < inputFiles.Count; i++)
{
    string taskId = String.Format("Task{0}", i);

    // Define task command line to convert each input file.
    string appPath = String.Format("%AZ_BATCH_APP_PACKAGE_{0}#{1}%", appPackageId, appPackageVersion);
    string inputMediaFile = inputFiles[i].FilePath;
    string outputMediaFile = String.Format("{0}{1}",
        System.IO.Path.GetFileNameWithoutExtension(inputMediaFile),
        ".mp3");
    string taskCommandLine = String.Format("cmd /c {0}\\ffmpeg-3.4-win64-static\\bin\\ffmpeg.exe -i {1} {2}", appPath, inputMediaFile, outputMediaFile);

    // Create a cloud task (with the task ID and command line)
    CloudTask task = new CloudTask(taskId, taskCommandLine);
    task.ResourceFiles = new List<ResourceFile> { inputFiles[i] };

    // Task output file
    List<OutputFile> outputFileList = new List<OutputFile>();
    OutputFileBlobContainerDestination outputContainer = new OutputFileBlobContainerDestination(outputContainerSasUrl);
    OutputFile outputFile = new OutputFile(outputMediaFile,
       new OutputFileDestination(outputContainer),
       new OutputFileUploadOptions(OutputFileUploadCondition.TaskSuccess));
    outputFileList.Add(outputFile);
    task.OutputFiles = outputFileList;
    tasks.Add(task);
}

// Add tasks as a collection
await batchClient.JobOperations.AddTaskAsync(jobId, tasks);
return tasks

Мониторинг задачMonitor tasks

Когда пакетная служба добавляет задачи к заданию, служба автоматически ставит в очередь и назначает их для выполнения на вычислительных узлах в связанном пуле.When Batch adds tasks to a job, the service automatically queues and schedules them for execution on compute nodes in the associated pool. Пакетная служба обрабатывает постановку задач в очередь, их планирование, повтор и другие задачи администрирования с учетом указанных параметров.Based on the settings you specify, Batch handles all task queuing, scheduling, retrying, and other task administration duties.

Есть несколько подходов к отслеживанию выполнения задач.There are many approaches to monitoring task execution. Этот пример определяет метод MonitorTasks для отчета о завершении и состоянии задачи (успешного выполнения или сбоя).This sample defines a MonitorTasks method to report only on completion and task failure or success states. Код MonitorTasks указывает ODATADetailLevel, чтобы эффективно выбирать только минимум сведений о задачах.The MonitorTasks code specifies an ODATADetailLevel to efficiently select only minimal information about the tasks. Затем он создает TaskStateMonitor , который предоставляет вспомогательные утилиты для мониторинга состояний задач.Then, it creates a TaskStateMonitor, which provides helper utilities for monitoring task states. В MonitorTasks пример ждет, пока все задачи не перейдут в состояние TaskState.Completed в течение определенного времени.In MonitorTasks, the sample waits for all tasks to reach TaskState.Completed within a time limit. Затем он завершает работу задания и сообщает о любых выполненных задачах. Однако он может обнаружить сбой, например с ненулевым кодом выхода.Then it terminates the job and reports on any tasks that completed but may have encountered a failure such as a non-zero exit code.

TaskStateMonitor taskStateMonitor = batchClient.Utilities.CreateTaskStateMonitor();
try
{
    await taskStateMonitor.WhenAll(addedTasks, TaskState.Completed, timeout);
}
catch (TimeoutException)
{
    batchClient.JobOperations.TerminateJob(jobId);
    Console.WriteLine(incompleteMessage);
    return false;
}
batchClient.JobOperations.TerminateJob(jobId);
 Console.WriteLine(completeMessage);
...

Очистка ресурсовClean up resources

После выполнения задач приложение автоматически удаляет созданный входной контейнер хранилища, а также предоставляет возможность удалить пул и задания пакетной службы.After it runs the tasks, the app automatically deletes the input storage container it created, and gives you the option to delete the Batch pool and job. Классы JobOperations и PoolOperations BatchClient предусматривают соответствующие методы удаления, которые вызываются, если подтвердить удаление.The BatchClient's JobOperations and PoolOperations classes both have corresponding delete methods, which are called if you confirm deletion. Вы не оплачиваете задания и задачи, но платите за используемые вычислительные узлы.Although you're not charged for jobs and tasks themselves, you are charged for compute nodes. Поэтому рекомендуется выделять пулы только при необходимости.Thus, we recommend that you allocate pools only as needed. При удалении пула удаляются все выходные данные задачи на узлах.When you delete the pool, all task output on the nodes is deleted. Но выходные файлы сохраняются в учетной записи хранения.However, the output files remain in the storage account.

Ставшие ненужными группу ресурсов, учетную запись пакетной службы и учетную запись хранения можно удалить.When no longer needed, delete the resource group, Batch account, and storage account. Для этого на портале Azure выберите группу ресурсов для учетной записи пакетной службы и щелкните Удалить группу ресурсов.To do so in the Azure portal, select the resource group for the Batch account and click Delete resource group.

Дополнительная информацияNext steps

Из этого руководства вы узнали, как выполнять такие задачи:In this tutorial, you learned about how to:

  • Добавление пакета приложения в учетную запись пакетной службы.Add an application package to your Batch account
  • Проверка подлинности с помощью учетных записей хранения и пакетной службы.Authenticate with Batch and Storage accounts
  • Передача входных файлов в хранилище.Upload input files to Storage
  • Создание пула вычислительных узлов для запуска приложения.Create a pool of compute nodes to run an application
  • Создание задания и задач для обработки входных файлов.Create a job and tasks to process input files
  • Мониторинг выполнения задач.Monitor task execution
  • Извлечение выходных файлов.Retrieve output files

Дополнительные примеры использования программного интерфейса .NET для планирования и обработки рабочих нагрузок пакетной службы см. в примерах на сайте GitHub.For more examples of using the .NET API to schedule and process Batch workloads, see the samples on GitHub.