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

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:

  1. Na panelu Azure Search vyhledejte a vyberte název účtu Batch.
  2. Na stránce účtu Batch vyberte v levém navigačním 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 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:

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

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

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