Dela via


Snabbstart: Använd .NET för att skapa en Batch-pool och köra ett jobb

Denna snabbstart visar hur du kommer igång med Azure Batch genom att köra en C#-app som använder Azure Batch .NET API. Den .NET-appen:

  • Laddar upp flera indatafiler till en Azure Storage-blobcontainer som ska användas för bearbetning av Batch-uppgifter.
  • Skapar en pool av två virtuella maskiner (VM:ar), eller beräkningsnoder, som kör Windows Server.
  • Skapar ett jobb som kör uppgifter på noderna för att bearbeta varje indatafil med hjälp av en Windows-kommandorad.
  • Visar utdatafilerna som aktiviteterna returnerar.

När du har slutfört den här snabbstarten förstår du de viktigaste begreppen i Batch-tjänsten och är redo att använda Batch med mer realistiska arbetsbelastningar i större skala.

Förutsättningar

Kör appen

För att slutföra denna snabbstart, ladda ner eller klona appen, ange dina kontovärden, bygg och kör appen, och verifiera resultatet.

Ladda ned eller klona appen

Ladda ner eller klona appen Azure Batch .NET Quickstart från GitHub. Använd följande kommando för att klona app-lagringsplatsen med en Git-klient:

git clone https://github.com/Azure-Samples/batch-dotnet-quickstart.git

Ange kontoinformation

Appen behöver använda dina Batch- och Storage-kontomanamn, kontonyckelvärden och Batch-kontoändpunkt. Du kan hämta den här informationen från Azure-portalen, Azure API:er eller kommandoradsverktyg.

Så här hämtar du kontoinformation från Azure-portalen:

  1. I Azure Search-fältet söker du efter och väljer ditt Batch-kontonamn.
  2. På sidan Batch-konto väljer du Nycklar i det vänstra navigeringsfältet.
  3. På sidan Nycklar kopierar du följande värden:
  • Batch-konto
  • Kontoslutpunkt
  • Primär åtkomstnyckel
  • Lagringskontonamn
  • Key1

Navigate to your downloaded batch-dotnet-quickstart folder and edit the credential strings in Program.cs to provide the values you copied:

// 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>

Viktigt!

Att exponera kontonycklar i appkällan rekommenderas inte för produktionsanvändning. Du bör begränsa åtkomsten till autentiseringsuppgifter och referera till dem i koden med hjälp av variabler eller en konfigurationsfil. Det är bäst att lagra Batch- och Storage-kontonycklar i Azure Key Vault.

Bygg och kör appen och se resultatet

To see the Batch workflow in action, build and run the application in Visual Studio. Du kan också använda kommandoraden dotnet build och dotnet run kommandon.

In Visual Studio:

  1. Öppna filen BatchDotNetQuickstart.sln, högerklicka på lösningen i Solution Explorer, och välj Bygg. Om du uppmanas, använd NuGet Package Manager för att uppdatera eller återställa NuGet-paket.

  2. Once the build completes, select BatchDotNetQuickstart in the top menu bar to run the app.

Typisk körtid med standardkonfigurationen är cirka fem minuter. Den första konfigurationen av poolnoden tar mest tid. För att köra om jobbet, ta bort jobbet från den tidigare körningen, men ta inte bort poolen. On a preconfigured pool, the job completes in a few seconds.

Appen returnerar utdata som liknar följande exempel:

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...

Det är en paus vid Monitoring all tasks for 'Completed' state, timeout in 00:30:00... när poolens beräkningsnoder startar. När uppgifter skapas, köar Batch dem för att köras i poolen. Så snart den första beräkningsnoden är tillgänglig körs den första aktiviteten på noden. Du kan övervaka nod-, aktivitets- och jobbstatus från batchkontosidan i Azure-portalen.

När varje uppgift har slutförts visas utdata som liknar följande exempel:

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:
...

Granska koden

Granska koden för att förstå stegen i Azure Batch .NET Quickstart.

Skapa tjänstklienter och ladda upp resursfiler

  1. To interact with the storage account, the app uses the Azure Storage Blobs client library for .NET to create a 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. Appen använder referensen blobServiceClient för att skapa en behållare i lagringskontot och ladda upp datafiler till behållaren. Filerna i lagringen definieras som Batch ResourceFile-objekt som Batch senare kan ladda ner till datorknuterna.

    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. Appen skapar ett BatchClient-objekt för att skapa och hantera Batch-pooler, jobb och uppgifter. Batch-klienten använder autentisering med delad nyckel. Batch stöder även Microsoft Entra-autentisering.

    var cred = new BatchSharedKeyCredentials(BatchAccountUrl, BatchAccountName, BatchAccountKey);
    
     using BatchClient batchClient = BatchClient.Open(cred);
    ...
    

Skapa en pool med beräkningsnoder

För att skapa en Batch-pool använder appen metoden BatchClient.PoolOperations.CreatePool för att ställa in antalet noder, VM-storlek och poolkonfiguration. Följande VirtualMachineConfiguration-objekt anger en ImageReference till en Windows Server Marketplace-bild. Batch stöder ett brett utbud av Windows Server och Linux Marketplace OS-bilder och stöder även anpassade VM-bilder.

PoolNodeCount och VM-storlek PoolVMSize är definierade konstanter. Appen skapar en grupp av två Standard_A1_v2-noder. Den här storleken ger en bra balans mellan prestanda och kostnad för den här snabbstarten.

Commit-metoden skickar poolen till Batch-tjänsten.


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

Skapa ett Batch-jobb

Ett Batch-jobb är en logisk gruppering av en eller flera aktiviteter. Jobbet innehåller inställningar som är gemensamma för aktiviteterna, till exempel prioritet och poolen som aktiviteter ska köras på.

Appen använder metoden BatchClient.JobOperations.CreateJob för att skapa ett jobb i din pool. Commit-metoden skickar in jobbet till Batch-tjänsten. Till en början har jobbet inga uppgifter.

try
{
    CloudJob job = batchClient.JobOperations.CreateJob();
    job.Id = JobId;
    job.PoolInformation = new PoolInformation { PoolId = PoolId };

    job.Commit();
}
...

Skapa uppgifter

Batch tillhandahåller flera sätt att distribuera appar och skript till beräkningsnoder. Den här appen skapar en lista med CloudTask indataResourceFile objekt. Varje uppgift bearbetar en indatafil med hjälp av en CommandLine-egenskap. Batch-kommandoraden är där du anger din app eller ditt skript.

Kommandoraden i följande kod kör Windows type-kommandot för att visa indatafilerna. Sedan lägger appen till varje uppgift i jobbet med metoden AddTask, vilket ställer uppgiften i kö för att köras på beräkningsnoderna.

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

Visa aktivitetens utdata

Appen skapar en TaskStateMonitor för att övervaka uppgifterna och säkerställa att de blir klara. När varje uppgift körs framgångsrikt, skrivs dess utdata till stdout.txt. Appen använder sedan egenskapen CloudTask.ComputeNodeInformation för att visa stdout.txt-filen för varje slutförd uppgift.

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

Rensa resurser

Appen tar automatiskt bort lagringscontainern som den skapar och ger dig möjlighet att ta bort Batch-poolen och jobbet. Pooler och noder debiteras medan noderna är i drift, även om de inte utför jobb. Om du inte längre behöver poolen tar du bort den.

När du inte längre behöver ditt Batch-konto och lagringskonto kan du ta bort resursgruppen som innehåller dem. I Azure-portalen väljer du Ta bort resursgrupp överst på resursgruppssidan. På skärmen Ta bort en resursgrupp anger du resursgruppens namn och väljer sedan Ta bort.

Nästa steg

In this quickstart, you ran an app that uses the Batch .NET API to create a Batch pool, nodes, job, and tasks. Jobbet laddade upp resursfiler till en lagringscontainer, körde uppgifter på noderna och visade utdata från noderna.

Nu när du förstår huvudbegreppen i Batch-tjänsten är du redo att använda Batch med mer realistiska arbetsbelastningar i större skala. To learn more about Azure Batch and walk through a parallel workload with a real-world application, continue to the Batch .NET tutorial.