Sdílet prostřednictvím


Rychlý začátek: Použijte .NET k vytvoření Batch poolu a spuštění úlohy

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

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:

  1. Na panelu Azure Search vyhledejte a vyberte název účtu Batch.
  2. Na stránce účtu Batch vyberte z levého navigačního panelu Klíče.
  3. 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 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
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.

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:

  1. 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 Package Manager k aktualizaci nebo obnovení balíčků NuGet.

  2. Jakmile bude sestavení dokončeno, vyberte BatchDotNetQuickstart v horní nabídce, abyste spustili 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ů

  1. 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;
    
  2. Aplikace používá odkaz blobServiceClient k 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));
    }
    
  3. Aplikace vytvoří objekt BatchClient pro vytváření a správu dávkových fondů, úloh a úkolů. 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ů

Chcete-li vytvořit dávkový fond, aplikace použije metodu BatchClient.PoolOperations.CreatePool k nastavení počtu uzlů, velikosti virtuálních počítačů a konfigurace fondu. Následující objekt VirtualMachineConfiguration určuje ImageReference pro obraz z 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.

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 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á metodu BatchClient.JobOperations.CreateJob k vytvoření úkolu ve vašem poolu. Metoda Commit odešle úlohu službě Batch. Zpočátku úloha nemá žá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 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á každý úkol k úloze metodou AddTask, která zařadí úkol 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);

    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 vytváří TaskStateMonitor pro monitorování úkolů a zajištění jejich dokončení. Když každý úkol úspěšně běží, jeho výstup se zapíše do stdout.txt. Aplikace poté použije vlastnost CloudTask.ComputeNodeInformation k zobrazení souboru stdout.txt pro každý dokončený úkol.

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());
}

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.