Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento rychlý průvodce vám ukáže, jak začít s Azure Batch pomocí spuštění aplikace v C#, která využívá Azure Batch .NET API. .NET aplikace:
- 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čů (VM) nebo výpočetních uzlů, které provozují Windows Server.
- Vytvoří úlohu, která spouští úkoly na uzlech pro zpracování každého vstupního souboru pomocí příkazového řádku Windows.
- Zobrazí výstupní soubory, které úlohy vrací.
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 | ARM šablona | Terraform.
Visual Studio 2019 nebo novější, nebo .NET 6.0 nebo novější, pro Linux nebo Windows.
Spuštění aplikace
Pro dokončení tohoto rychlého startu si stáhněte nebo naklonujte aplikaci, zadejte údaje svého účtu, sestavte a spusťte aplikaci a ověřte výstup.
Stažení nebo klonování aplikace
Stáhněte nebo klonujte aplikaci Azure Batch .NET Quickstart 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.
- Účet „Batch“
- Koncový bod účtu
- Název účtu úložiště
- ID předplatného
- Název skupiny prostředků
Přejděte do vaší stažené složky batch-dotnet-quickstart a upravte řetězce přihlašovacích údajů v Program.cs tak, aby obsahovaly hodnoty, které jste zkopírovali.
// 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>";
Sestavte a spusťte aplikaci a zobrazte výstup.
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 příkazy dotnet run.
V aplikaci Visual Studio:
Otevřete soubor BatchDotNetQuickstart.sln, klikněte pravým tlačítkem na řešení v Průzkumníku řešení a vyberte možnost Sestavit. Pokud budete vyzváni, použijte NuGet Správce balíčků 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. Nastavení počátečního uzlu fondu zabere nejvíce času. Pokud chcete úlohu spustit znovu, odstraňte úlohu z předchozího spuštění, ale neodstraňujte fond. V předkonfigurovaném fondu se úloha dokončí za několik 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...
Je pauza ve Monitoring all tasks for 'Completed' state, timeout in 00:30:00..., zatímco se spouští výpočetní uzly fondu. Při vytváření úkolů je služba Batch zařadí do fronty, aby se spustily ve fondu. Jakmile bude k dispozici první výpočetní uzel, spustí se na uzlu první úloha. Stav uzlu, úkolu a úlohy můžete sledovat na stránce účtu Batch v 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
Zkontrolujte kód, abyste pochopili kroky v Azure Batch .NET Quickstart.
Vytvoření klientských služeb a nahrání souborů zdrojů
K interakci s účtem úložiště používá aplikace klientskou knihovnu Azure Storage Blobs pro .NET k vytvoření objektu BlobServiceClient.
string blobUri = "https://" + storageAccountName + ".blob.core.windows.net"; var blobServiceClient = new BlobServiceClient(new Uri(blobUri), new DefaultAzureCredential()); return blobServiceClient;Aplikace používá odkaz
blobServiceClientk vytvoření kontejneru v úložišti a nahrání datových souborů do tohoto kontejneru. Soubory v úložišti jsou definovány jako objekty Batch ResourceFile, které může Batch následně 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 z knihovny Azure.Compute.Batch k vytváření a správě úloh a úkolů služby Batch. Klient Batch používá ověřování Microsoft Entra.
BatchClient batchClient = new BatchClient(new Uri(BatchAccountUrl), new DefaultAzureCredential()); ...Aplikace také používá knihovnu Azure.ResourceManager.Batch pro správu účtu Batch a jeho fondů. Vytvoří ArmClient a získá odkaz BatchAccountResource pro účet Batch pomocí ID předplatného, názvu skupiny prostředků a názvu účtu Batch.
ArmClient armClient = new ArmClient(new DefaultAzureCredential()); ResourceIdentifier batchAccountIdentifier = BatchAccountResource.CreateResourceIdentifier( SubscriptionId, ResourceGroupName, BatchAccountName); BatchAccountResource batchAccount = armClient.GetBatchAccountResource(batchAccountIdentifier);
Vytvoření fondu výpočetních uzlů
K vytvoření fondu Batch používá aplikace metodu BatchAccountPoolCollection.CreateOrUpdateAsync k nastavení počtu uzlů, velikosti virtuálního počítače a konfigurace fondu. Následující objekt BatchVmConfiguration určuje BatchImageReference k imagi Windows Server Marketplace. Lze pracovat s různými obrazy operačních systémů Windows Server a Linux Marketplace, a také s vlastními obrazy virtuálních strojů v Batch.
Proměnné PoolNodeCount a velikost VM PoolVMSize jsou definované konstanty. Aplikace vytváří pool dvou uzlů Standard_A1_v2. Tato velikost nabízí dobrou rovnováhu mezi výkonem a náklady na tento rychlý start.
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);
Vytvoření úlohy Batch
Úloha Batch je logické seskupení jednoho nebo více úkolů. Úloha zahrnuje nastavení společná pro jednotlivé úkoly, jako je priorita a pool, na kterém se úkoly spouštějí.
Aplikace používá BatchClient.CreateJobAsync k vytvoření úlohy ve vašem fondu. Zpočátku úloha nemá žádné úkoly.
BatchJobCreateOptions job = new BatchJobCreateOptions(JobId, new BatchPoolInfo() { PoolId = PoolId });
await batchClient.CreateJobAsync(job);
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 objektů ResourceFile. Každý úkol zpracovává vstupní soubor pomocí vlastnosti CommandLine. Příkazový řádek Batch je místo, kde zadáváte svou aplikaci nebo skript.
Příkazový řádek v následujícím kódu spustí příkaz systému Windows type, aby zobrazil vstupní soubory. Potom aplikace přidá úkoly k úloze pomocí BatchClient.CreateTasksAsync, která je zařadí do fronty ke 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);
BatchTaskCreateOptions task = new BatchTaskCreateOptions(taskId, taskCommandLine)
{
ResourceFiles = { inputFiles[i] }
};
tasks.Add(task);
}
await batchClient.CreateTasksAsync(JobId, tasks);
Zobrazení výstupu úkolu
Aplikace čeká na dokončení úkolů. Když každý úkol úspěšně běží, jeho výstup se zapíše do stdout.txt. Aplikace pak pomocí vlastnosti BatchTask.NodeInfo zobrazí stdout.txt soubor pro každou dokončenou úlohu.
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());
}
Upravte zdroje
Aplikace automaticky smaže úložný kontejner, který vytvoří, a poskytne vám možnost smazat dávkový pool a úlohu. Za fondy a uzly se účtují poplatky, i když nejsou spuštěné úlohy, během jejich provozu. Pokud už pool nepotřebujete, odstraňte ho.
Pokud již nepotřebujete svůj účet Batch a účet úložiště, 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 úvodu jste spustili aplikaci, která používá Batch .NET API k vytvoření skupiny Batch, uzlů, úlohy a úkolů. Úloha nahrála soubory zdrojů do kontejneru úložiště, spustila úkoly na výpočetních uzlech a zobrazila výstupy z těchto 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. Chcete-li se dozvědět více o Azure Batch a projít si paralelní pracovní zátěž s aplikací z reálného světa, pokračujte na tutoriál Batch .NET.