Rychlý start: Použití .NET k vytvoření fondu Batch a spuštění úlohy
V tomto rychlém startu se dozvíte, jak začít se službou Azure Batch spuštěním aplikace v jazyce C#, která používá rozhraní .NET API služby Azure Batch. Aplikace .NET:
- Nahraje několik vstupních datových souborů do kontejneru objektů blob služby Azure Storage, který se použije ke zpracování úloh Batch.
- Vytvoří fond dvou virtuálních počítačů (virtuálních počítačů) nebo výpočetních uzlů se systémem Windows Server.
- Vytvoří úlohu, která spouští úkoly na uzlech a zpracovává každý vstupní soubor pomocí příkazového řádku Windows.
- Zobrazí výstupní soubory, které úkoly vrátí.
Po dokončení tohoto rychlého startu rozumíte klíčovým konceptům služby Batch a jste připraveni službu Batch používat s realističtějšími a většími úlohami škálování.
Požadavky
Účet Azure s aktivním předplatným. Pokud ho nemáte, vytvořte si účet zdarma.
Účet Batch s propojeným účtem Azure Storage. Účty můžete vytvořit pomocí některé z následujících metod: Azure CLI Azure | Portal | Bicep | šablony | ARM Terraform.
Visual Studio 2019 nebo novější nebo .NET 6.0 nebo novější pro Linux nebo Windows
Spustit aplikaci
K dokončení tohoto rychlého startu stáhnete nebo naklonujete aplikaci, zadáte hodnoty účtu, sestavíte a spustíte aplikaci a ověříte výstup.
Stažení nebo klonování aplikace
Stáhněte nebo naklonujte aplikaci Rychlý start pro Azure Batch .NET z GitHubu. Pomocí následujícího příkazu naklonujte úložiště aplikace pomocí klienta Git:
git clone https://github.com/Azure-Samples/batch-dotnet-quickstart.git
Zadejte informace o svém účtu.
Aplikace musí používat názvy účtů Batch a Storage, hodnoty klíče účtu a koncový bod účtu Batch. Tyto informace můžete získat z webu Azure Portal, rozhraní API Azure nebo nástrojů příkazového řádku.
Získání informací o účtu z webu Azure Portal:
- Na panelu Azure Search vyhledejte a vyberte název účtu Batch.
- Na stránce účtu Batch vyberte v levém navigačním panelu klíče .
- Na stránce Klíče zkopírujte následující hodnoty:
- Účet Batch
- Koncový bod účtu
- Primární přístupový klíč
- Název účtu úložiště
- Klíč1
Přejděte do složky batch-dotnet-quickstart a upravte řetězce přihlašovacích údajů v souboru Program.cs a zadejte hodnoty, které jste zkopírovali:
// 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>
Důležité
Zveřejnění klíčů účtu ve zdroji aplikace se nedoporučuje pro produkční využití. Měli byste omezit přístup k přihlašovacím údajům a odkazovat na ně v kódu pomocí proměnných nebo konfiguračního souboru. Nejlepší je ukládat klíče účtu Batch a Storage ve službě Azure Key Vault.
Sestavení a spuštění aplikace a zobrazení výstupu
Pokud chcete zobrazit pracovní postup Batch v akci, sestavte a spusťte aplikaci v sadě Visual Studio. Můžete také použít příkazový řádek dotnet build
a dotnet run
příkazy.
V sadě Visual Studio:
Otevřete soubor BatchDotNetQuickstart.sln, klikněte pravým tlačítkem na řešení v Průzkumník řešení a vyberte Sestavit. Pokud se zobrazí výzva, použijte Správce balíčků NuGet k aktualizaci nebo obnovení balíčků NuGet.
Po dokončení sestavení vyberte BatchDotNetQuickstart v horním řádku nabídek a spusťte aplikaci.
Typická doba běhu s výchozí konfigurací je přibližně pět minut. Instalace počátečního uzlu fondu trvá nejvíce času. Pokud chcete úlohu spustit znovu, odstraňte ji z předchozího spuštění, ale neodstraňovat fond. Ve fondu, který je už nakonfigurovaný, se úloha dokončí za pár sekund.
Aplikace vrátí výstup podobný následujícímu příkladu:
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...
Během spuštění výpočetních uzlů fondu se zastaví Monitoring all tasks for 'Completed' state, timeout in 00:30:00...
. Při vytváření úkolů je Služba Batch zařadí do fronty, aby běžela ve fondu. Jakmile bude k dispozici první výpočetní uzel, spustí se na uzlu první úloha. Stav uzlu, úkolu a úlohy můžete monitorovat na stránce účtu Batch na webu Azure Portal.
Po dokončení každého úkolu se zobrazí výstup podobný následujícímu příkladu:
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:
...
Kontrola kódu
Projděte si kód a seznamte se s kroky v rychlém startu azure Batch .NET.
Vytvoření klientů služeb a nahrání souborů prostředků
K interakci s účtem úložiště používá aplikace klientskou knihovnu Azure Storage Blobs pro .NET k vytvoření objektu 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;
Aplikace používá
blobServiceClient
odkaz k vytvoření kontejneru v účtu úložiště a nahrání datových souborů do kontejneru. Soubory v úložišti jsou definovány jako objekty Batch ResourceFile, které služba Batch může později stáhnout do výpočetních uzlů.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)); }
Aplikace vytvoří objekt BatchClient pro vytváření a správu fondů, úloh a úkolů služby Batch. Klient Batch používá ověřování pomocí sdíleného klíče. Batch také podporuje ověřování Microsoft Entra.
var cred = new BatchSharedKeyCredentials(BatchAccountUrl, BatchAccountName, BatchAccountKey); using BatchClient batchClient = BatchClient.Open(cred); ...
Vytvoření fondu výpočetních uzlů
K vytvoření fondu Batch používá aplikace metodu BatchClient.PoolOperations.CreatePool k nastavení počtu uzlů, velikosti virtuálního počítače a konfigurace fondu. Následující objekt VirtualMachineConfiguration určuje ImageReference na image Windows Server Marketplace. Batch podporuje širokou škálu imagí operačního systému Windows Server a Linux Marketplace a také podporuje vlastní image virtuálních počítačů.
Velikost PoolNodeCount
virtuálního PoolVMSize
počítače jsou definované konstanty. Aplikace vytvoří fond dvou Standard_A1_v2 uzlů. Tato velikost nabízí dobrou rovnováhu mezi výkonem a náklady na tento rychlý start.
Metoda Commit odešle fond do služby Batch.
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();
}
...
Vytvoření úlohy Batch
Úloha služby Batch je logická skupina jednoho nebo víc úkolů. Úloha zahrnuje nastavení společná pro úkoly, jako je priorita a fond pro spouštění úkolů.
Aplikace vytvoří úlohu ve vašem fondu pomocí metody BatchClient.JobOperations.CreateJob. Metoda Commit odešle úlohu do služby Batch. Na začátku úloha neobsahuje žádné úkoly.
try
{
CloudJob job = batchClient.JobOperations.CreateJob();
job.Id = JobId;
job.PoolInformation = new PoolInformation { PoolId = PoolId };
job.Commit();
}
...
Vytvoření úkolů
Služba Batch nabízí několik způsobů nasazení aplikací a skriptů do výpočetních uzlů. Tato aplikace vytvoří seznam vstupních ResourceFile
objektů CloudTask. Každý úkol zpracovává vstupní soubor pomocí vlastnosti CommandLine . Na příkazovém řádku Batch zadáte aplikaci nebo skript.
Příkazový řádek v následujícím kódu spustí příkaz Windows type
, který zobrazí vstupní soubory. Potom aplikace přidá jednotlivé úlohy do úlohy pomocí metody AddTask , která zařadí úlohu do fronty pro spuštění na výpočetních uzlech.
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);
Zobrazení výstupu úkolu
Aplikace vytvoří TaskStateMonitor pro monitorování úkolů a ujistěte se, že jsou dokončené. Po úspěšném spuštění každé úlohy se jeho výstup zapíše do souboru stdout.txt. Aplikace pak použije CloudTask.ComputeNodeInformation vlastnost k zobrazení souboru stdout.txt pro každou dokončenou úlohu.
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());
}
Vyčištění prostředků
Aplikace automaticky odstraní kontejner úložiště, který vytvoří, a dá vám možnost odstranit fond a úlohu služby Batch. Za spuštěné uzly a fondy se účtují poplatky, i když nejsou spuštěné úlohy. Pokud už fond nepotřebujete, odstraňte ho.
Pokud už účet Batch a účet úložiště nepotřebujete, můžete odstranit skupinu prostředků, která je obsahuje. Na webu Azure Portal vyberte v horní části stránky skupiny prostředků možnost Odstranit skupinu prostředků. Na obrazovce Odstranit skupinu prostředků zadejte název skupiny prostředků a pak vyberte Odstranit.
Další kroky
V tomto rychlém startu jste spustili aplikaci, která používá rozhraní API služby Batch .NET k vytvoření fondu, uzlů, úloh a úkolů služby Batch. Úloha nahrála soubory prostředků do kontejneru úložiště, spustila úkoly na uzlech a zobrazila výstup z uzlů.
Teď, když rozumíte klíčovým konceptům služby Batch, jste připraveni službu Batch používat s realističtějšími a většími škálovacími úlohami. Další informace o službě Azure Batch a procházení paralelních úloh pomocí reálné aplikace najdete v kurzu k batch .NET.