Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом кратком руководстве показано, как приступить к работе с пакетной службой Azure, запустив приложение C#, использующее API пакетной службы Azure. Приложение .NET:
- Отправляет несколько входных файлов данных в контейнер BLOB-объектов службы хранилища Azure для обработки задач пакетной службы.
- Создает пул из двух виртуальных машин (ВМ) или вычислительных узлов под управлением Windows Server.
- Создает задание, которое выполняет задачи на узлах для обработки каждого входного файла с помощью командной строки Windows.
- Отображает выходные файлы, возвращаемые задачами.
После работы с этим кратким руководством вы узнаете основные понятия пакетной службы и готовы использовать пакетную службу с более реалистичными, большими масштабируемыми рабочими нагрузками.
Предпосылки
Учетная запись Azure с активной подпиской. Если у вас нет учетной записи, создайте бесплатную учетную запись.
Учетная запись службы Batch со связанной учетной записью служба хранилища Azure. Учетные записи можно создать с помощью любого из следующих методов: 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-dotnet-quickstart и измените строки учетных данных в Program.cs , чтобы указать скопированные значения:
// Batch account credentials
const string BatchAccountName = "<batch account>";
const string BatchAccountUrl = "<account endpoint>";
// Azure Resource Manager credentials for the Batch account
const string SubscriptionId = "<subscription ID>";
const string ResourceGroupName = "<resource group name>";
// Storage account credentials
const string StorageAccountName = "<storage account name>";
Создание и запуск приложения и просмотр выходных данных
Чтобы просмотреть пакетный рабочий процесс в действии, создайте и запустите приложение в 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 .NET.
Создание клиентов служб и отправка файлов ресурсов
Для взаимодействия с учетной записью хранения приложение использует клиентская библиотека BLOB-объектов службы хранилища Azure для .NET для создания BLOBServiceClient.
string blobUri = "https://" + storageAccountName + ".blob.core.windows.net"; var blobServiceClient = new BlobServiceClient(new Uri(blobUri), new DefaultAzureCredential()); 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 из библиотеки Azure.Compute.Batch для создания заданий и задач Batch и управления ими. Клиент Batch использует аутентификацию Microsoft Entra.
BatchClient batchClient = new BatchClient(new Uri(BatchAccountUrl), new DefaultAzureCredential()); ...Приложение также использует библиотеку Azure.ResourceManager.Batch для управления учетной записью Batch и ее пулами. Он создает ArmClient и получает ссылку BatchAccountResource для учетной записи пакетной службы с помощью идентификатора подписки, имени группы ресурсов и имени учетной записи пакетной службы.
ArmClient armClient = new ArmClient(new DefaultAzureCredential()); ResourceIdentifier batchAccountIdentifier = BatchAccountResource.CreateResourceIdentifier( SubscriptionId, ResourceGroupName, BatchAccountName); BatchAccountResource batchAccount = armClient.GetBatchAccountResource(batchAccountIdentifier);
Создание пула вычислительных узлов
Чтобы создать пул Batch, приложение использует метод BatchAccountPoolCollection.CreateOrUpdateAsync, чтобы задать количество узлов, размер виртуальной машины и конфигурацию пула. Следующий объект BatchVmConfiguration задаёт объект BatchImageReference, ссылающийся на образ Windows Server из Marketplace. Пакетная служба поддерживает широкий спектр образов ОС Windows Server и Linux Marketplace, а также поддерживает пользовательские образы виртуальных машин.
PoolNodeCount и размер виртуальной машины PoolVMSize определены как константы. Приложение создает пул двух Standard_A1_v2 узлов. Этот размер обеспечивает хороший баланс производительности и затрат для этого быстрого запуска.
BatchImageReference imageReference = new BatchImageReference()
{
Publisher = "MicrosoftWindowsServer",
Offer = "WindowsServer",
Sku = "2016-datacenter-smalldisk",
Version = "latest"
};
BatchVmConfiguration vmConfiguration = new BatchVmConfiguration(
imageReference: imageReference,
nodeAgentSkuId: "batch.node.windows amd64");
BatchAccountPoolData poolData = new BatchAccountPoolData()
{
VmSize = PoolVMSize,
DeploymentConfiguration = new BatchDeploymentConfiguration() { VmConfiguration = vmConfiguration },
ScaleSettings = new BatchAccountPoolScaleSettings()
{
FixedScale = new BatchAccountFixedScaleSettings() { TargetDedicatedNodes = PoolNodeCount }
}
};
await batchAccount.GetBatchAccountPools().CreateOrUpdateAsync(WaitUntil.Completed, PoolId, poolData);
Создание пакетного задания
Пакетное задание — это логическая группировка одной или нескольких задач. Задание включает параметры, общие для задач, таких как приоритет и пул для выполнения задач.
Приложение использует BatchClient.CreateJobAsync для создания задания в вашем пуле. Изначально задание не имеет задач.
BatchJobCreateOptions job = new BatchJobCreateOptions(JobId, new BatchPoolInfo() { PoolId = PoolId });
await batchClient.CreateJobAsync(job);
Создание задач
Сервис Batch предлагает несколько способов развертывания приложений и скриптов на вычислительных узлах. Это приложение создает список входных объектов ResourceFile. Каждая задача обрабатывает входной файл с помощью свойства CommandLine . В командной строке Batch вы указываете своё приложение или скрипт.
Командная строка в следующем коде запускает команду Windows type для отображения входных файлов. Затем приложение добавляет задачи в задание с помощью метода BatchClient.CreateTasksAsync, который ставит задачи в очередь на выполнение на вычислительных узлах.
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);
BatchTaskCreateOptions task = new BatchTaskCreateOptions(taskId, taskCommandLine)
{
ResourceFiles = { inputFiles[i] }
};
tasks.Add(task);
}
await batchClient.CreateTasksAsync(JobId, tasks);
Просмотр выходных данных задачи
Приложение ожидает завершения задач. При успешном выполнении каждой задачи выходные данные записываются в stdout.txt. Затем приложение использует свойство BatchTask.NodeInfo для отображения файлаstdout.txt для каждой завершенной задачи.
await foreach (BatchTask task in batchClient.GetTasksAsync(JobId))
{
string nodeId = task.NodeInfo?.NodeId ?? "<unknown>";
Console.WriteLine("Task: {0}", task.Id);
Console.WriteLine("Node: {0}", nodeId);
Console.WriteLine("Standard out:");
BinaryData stdout = await batchClient.GetTaskFileAsync(JobId, task.Id, "stdout.txt");
Console.WriteLine(stdout.ToString());
}
Очистка ресурсов
Приложение автоматически удаляет контейнер хранилища, который оно создает, и предоставляет возможность удаления пула Batch и задания. Пулы и узлы несут расходы, пока узлы активны, даже если они не выполняют задания. Если пул больше не нужен, удалите его.
Если вам больше не нужна учетная запись пакетной службы и учетная запись хранения, можно удалить группу ресурсов, содержащую их. На портале Azure выберите "Удалить группу ресурсов " в верхней части страницы группы ресурсов. На экране Удаление группы ресурсов введите имя группы ресурсов, а затем выберите Удалить.
Дальнейшие действия
В этом кратком руководстве вы запустили приложение, использующее API пакетной службы .NET для создания пула пакетной службы, узлов, заданий и задач. Задание отправляет файлы ресурсов в контейнер хранилища, выполняет задачи на узлах и отображает выходные данные узлов.
Теперь, когда вы понимаете основные понятия пакетной службы, вы готовы использовать пакетную службу с более реалистичными, большими масштабируемыми рабочими нагрузками. Чтобы узнать больше о пакетная служба Azure и рассмотреть пример параллельной рабочей нагрузки с реальным приложением, перейдите к руководству Batch для .NET.