Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом кратком руководстве показано, как приступить к работе с пакетной службой Azure, запустив приложение C#, использующее API пакетной службы Azure. Приложение .NET:
- Отправляет несколько входных файлов данных в контейнер BLOB-объектов службы хранилища Azure для обработки задач пакетной службы.
- Создает пул из двух виртуальных машин (ВМ) или вычислительных узлов под управлением Windows Server.
- Создает задание, которое выполняет задачи на узлах для обработки каждого входного файла с помощью командной строки Windows.
- Отображает выходные файлы, возвращаемые задачами.
После работы с этим кратким руководством вы узнаете основные понятия пакетной службы и готовы использовать пакетную службу с более реалистичными, большими масштабируемыми рабочими нагрузками.
Предпосылки
Учетная запись Azure с активной подпиской. Если у вас нет учетной записи, создайте бесплатную учетную запись.
Учетная запись службы Batch со связанной учетной записью Azure Storage. Учетные записи можно создать с помощью любого из следующих методов: Azure CLI | портала Azure | Bicep | ARM-шаблона | Terraform.
Visual Studio 2019 или более поздней версии или .NET 6.0 или более поздней версии для Linux или Windows.
Запуск приложения
Чтобы завершить это краткое руководство, скачайте или клонируйте приложение, укажите значения учетной записи, соберите и запустите приложение, а затем проверьте результаты работы.
Скачивание или клонирование приложения
Скачайте или клонируйте приложение быстрого запуска пакетной службы Azure .NET из GitHub. Используйте следующую команду, чтобы клонировать репозиторий приложения с клиентом Git:
git clone https://github.com/Azure-Samples/batch-dotnet-quickstart.git
Укажите сведения о учетной записи
Приложение должно использовать имена ваших учетных записей для служб Batch и Storage, значения ключей учетной записи и конечную точку учетной записи Batch. Эти сведения можно получить с портала Azure, API Azure или средств командной строки.
Чтобы получить сведения об учетной записи на портале Azure, выполните следующие действия.
- На панели поиска Azure найдите и выберите имя учетной записи Batch.
- На странице учетной записи Batch выберите Ключи в области навигации слева.
- На странице "Ключи" скопируйте следующие значения:
- Учетная запись пакетной обработки
- Конечная точка учетной записи
- Первичный ключ доступа
- Имя учетной записи хранения
- Key1
Перейдите к скачаной папке batch-dotnet-quickstart и измените строки учетных данных в Program.cs , чтобы указать скопированные значения:
// Batch account credentials
private const string BatchAccountName = "<batch account>";
private const string BatchAccountKey = "<primary access key>";
private const string BatchAccountUrl = "<account endpoint>";
// Storage account credentials
private const string StorageAccountName = "<storage account name>";
private const string StorageAccountKey = "<key1>
Это важно
Экспонирование ключей учетной записи в исходном коде приложения не рекомендуется для использования в продуктивной среде. Необходимо ограничить доступ к учетным данным и ссылаться на них в коде с помощью переменных или файла конфигурации. Оптимальным вариантом является хранение ключей учетной записи Batch и Storage в Azure Key Vault.
Создание и запуск приложения и просмотр выходных данных
Чтобы просмотреть пакетный рабочий процесс в действии, создайте и запустите приложение в Visual Studio. Вы также можете использовать командную строку dotnet build
и dotnet run
команды.
В Visual Studio:
Откройте файл BatchDotNetQuickstart.sln , щелкните правой кнопкой мыши решение в обозревателе решений и выберите "Сборка". При появлении запроса используйте диспетчер пакетов NuGet для обновления или восстановления пакетов NuGet.
После завершения сборки выберите BatchDotNetQuickstart в верхней строке меню, чтобы запустить приложение.
Обычное время выполнения с конфигурацией по умолчанию составляет примерно пять минут. Начальная настройка узла пула занимает больше всего времени. Чтобы повторно запустить задание, удалите задание из предыдущего запуска, но не удаляйте пул. В предварительно настроенном пуле задание завершается через несколько секунд.
Приложение возвращает выходные данные, аналогичные следующему примеру:
Sample start: 11/16/2022 4:02:54 PM
Container [input] created.
Uploading file taskdata0.txt to container [input]...
Uploading file taskdata1.txt to container [input]...
Uploading file taskdata2.txt to container [input]...
Creating pool [DotNetQuickstartPool]...
Creating job [DotNetQuickstartJob]...
Adding 3 tasks to job [DotNetQuickstartJob]...
Monitoring all tasks for 'Completed' state, timeout in 00:30:00...
На Monitoring all tasks for 'Completed' state, timeout in 00:30:00...
возникает пауза, пока запускаются вычислительные узлы пула. По мере создания задач системой пакетной обработки они ставятся в очередь для выполнения в пуле. Как только первый вычислительный узел доступен, первая задача выполняется на узле. Вы можете отслеживать состояние узла, задачи и задания на странице учетной записи пакетной службы на портале Azure.
После завершения каждой задачи вы увидите выходные данные, аналогичные следующему примеру:
Printing task output.
Task: Task0
Node: tvm-2850684224_3-20171205t000401z
Standard out:
Batch processing began with mainframe computers and punch cards. Today it still plays a central role...
stderr:
...
Просмотр кода
Просмотрите код, чтобы понять шаги в руководстве по быстрому началу работы с Azure Batch .NET.
Создание клиентов служб и отправка файлов ресурсов
Для взаимодействия с учетной записью хранения приложение использует клиентская библиотека BLOB-объектов службы хранилища Azure для .NET для создания BLOBServiceClient.
var sharedKeyCredential = new StorageSharedKeyCredential(storageAccountName, storageAccountKey); string blobUri = "https://" + storageAccountName + ".blob.core.windows.net"; var blobServiceClient = new BlobServiceClient(new Uri(blobUri), sharedKeyCredential); return blobServiceClient;
Приложение использует ссылку
blobServiceClient
на создание контейнера в учетной записи хранения и отправку файлов данных в контейнер. Файлы в хранилище определяются как объекты Batch ResourceFile , которые пакетная служба может скачать на вычислительные узлы.List<string> inputFilePaths = new() { "taskdata0.txt", "taskdata1.txt", "taskdata2.txt" }; var inputFiles = new List<ResourceFile>(); foreach (var filePath in inputFilePaths) { inputFiles.Add(UploadFileToContainer(containerClient, inputContainerName, filePath)); }
Приложение создает объект BatchClient для создания пулов пакетной службы, заданий и задач и управления ими. Клиент пакетной службы использует проверку подлинности с общим ключом. Batch также поддерживает проверку подлинности Microsoft Entra.
var cred = new BatchSharedKeyCredentials(BatchAccountUrl, BatchAccountName, BatchAccountKey); using BatchClient batchClient = BatchClient.Open(cred); ...
Создание пула вычислительных узлов
Чтобы создать пул пакетной службы, приложение использует метод BatchClient.PoolOperations.CreatePool для задания количества узлов, размера виртуальной машины и конфигурации пула. Следующий объект VirtualMachineConfiguration указывает ImageReference для образа Windows Server Marketplace. Пакетная служба поддерживает широкий спектр образов ОС Windows Server и Linux Marketplace, а также поддерживает пользовательские образы виртуальных машин.
PoolNodeCount
и размер виртуальной машины PoolVMSize
определены как константы. Приложение создает пул двух Standard_A1_v2 узлов. Этот размер обеспечивает хороший баланс производительности и затрат для этого быстрого запуска.
Метод Commit отправляет пул в пакетную службу.
private static VirtualMachineConfiguration CreateVirtualMachineConfiguration(ImageReference imageReference)
{
return new VirtualMachineConfiguration(
imageReference: imageReference,
nodeAgentSkuId: "batch.node.windows amd64");
}
private static ImageReference CreateImageReference()
{
return new ImageReference(
publisher: "MicrosoftWindowsServer",
offer: "WindowsServer",
sku: "2016-datacenter-smalldisk",
version: "latest");
}
private static void CreateBatchPool(BatchClient batchClient, VirtualMachineConfiguration vmConfiguration)
{
try
{
CloudPool pool = batchClient.PoolOperations.CreatePool(
poolId: PoolId,
targetDedicatedComputeNodes: PoolNodeCount,
virtualMachineSize: PoolVMSize,
virtualMachineConfiguration: vmConfiguration);
pool.Commit();
}
...
Создание пакетного задания
Пакетное задание — это логическая группировка одной или нескольких задач. Задание включает параметры, общие для задач, таких как приоритет и пул для выполнения задач.
Приложение использует метод BatchClient.JobOperations.CreateJob для создания задания в пуле. Метод Commit отправляет задание в пакетную службу. Изначально задание не имеет задач.
try
{
CloudJob job = batchClient.JobOperations.CreateJob();
job.Id = JobId;
job.PoolInformation = new PoolInformation { PoolId = PoolId };
job.Commit();
}
...
Создание задач
Сервис Batch предлагает несколько способов развертывания приложений и скриптов на вычислительных узлах. Это приложение создает список входных ResourceFile
объектов CloudTask. Каждая задача обрабатывает входной файл с помощью свойства CommandLine . В командной строке Batch вы указываете своё приложение или скрипт.
Командная строка в следующем коде запускает команду Windows type
для отображения входных файлов. Затем приложение добавляет каждую задачу в задание с помощью метода AddTask, который ставит задачи в очередь для выполнения на вычислительных узлах.
for (int i = 0; i < inputFiles.Count; i++)
{
string taskId = String.Format("Task{0}", i);
string inputFilename = inputFiles[i].FilePath;
string taskCommandLine = String.Format("cmd /c type {0}", inputFilename);
var task = new CloudTask(taskId, taskCommandLine)
{
ResourceFiles = new List<ResourceFile> { inputFiles[i] }
};
tasks.Add(task);
}
batchClient.JobOperations.AddTask(JobId, tasks);
Просмотр выходных данных задачи
Приложение создает TaskStateMonitor для мониторинга задач и убедитесь, что они завершены. При успешном выполнении каждой задачи выходные данные записываются вstdout.txt. Затем приложение использует свойство CloudTask.ComputeNodeInformation для отображения файлаstdout.txt для каждой завершенной задачи.
foreach (CloudTask task in completedtasks)
{
string nodeId = String.Format(task.ComputeNodeInformation.ComputeNodeId);
Console.WriteLine("Task: {0}", task.Id);
Console.WriteLine("Node: {0}", nodeId);
Console.WriteLine("Standard out:");
Console.WriteLine(task.GetNodeFile(Constants.StandardOutFileName).ReadAsString());
}
Очистка ресурсов
Приложение автоматически удаляет контейнер хранилища, который оно создает, и предоставляет возможность удаления пула Batch и задания. Пулы и узлы несут расходы, пока узлы активны, даже если они не выполняют задания. Если пул больше не нужен, удалите его.
Если вам больше не нужна учетная запись пакетной службы и учетная запись хранения, можно удалить группу ресурсов, содержащую их. На портале Azure выберите "Удалить группу ресурсов " в верхней части страницы группы ресурсов. На экране Удаление группы ресурсов введите имя группы ресурсов, а затем выберите Удалить.
Дальнейшие действия
В этом кратком руководстве вы запустили приложение, использующее API пакетной службы .NET для создания пула пакетной службы, узлов, заданий и задач. Задание отправляет файлы ресурсов в контейнер хранилища, выполняет задачи на узлах и отображает выходные данные узлов.
Теперь, когда вы понимаете основные понятия пакетной службы, вы готовы использовать пакетную службу с более реалистичными, большими масштабируемыми рабочими нагрузками. Чтобы узнать больше о Azure Batch и рассмотреть пример параллельной рабочей нагрузки с реальным приложением, перейдите к руководству Batch для .NET.