Spara jobb- och uppgiftsdata till Azure Storage med Batch File Conventions-biblioteket för .NET

En uppgift som körs i Azure Batch kan generera utdata när den körs. Uppgiftsutdata måste ofta lagras för hämtning av andra uppgifter i jobbet, klientprogrammet som körde jobbet eller båda. Uppgifter skriver utdata till filsystemet för en Batch-beräkningsnod, men alla data på noden raderas när den ombildas eller när noden lämnar poolen. Aktiviteter kan också ha en kvarhållningsperiod för filer, varefter filer som skapats av aktiviteten tas bort. Därför är det viktigt att spara aktivitetsutdata som du behöver senare i ett datalager, till exempel Azure Storage.

Alternativ för lagringskonton i Batch finns i Batch-konton och Azure Storage-konton.

Du kan spara uppgiftsdata från Azure Batch med hjälp av filkonventionsbiblioteket för .NET. Filkonventionsbiblioteket förenklar processen för att lagra och hämta utdata för aktiviteter i Azure Storage. Du kan använda filkonventionsbiblioteket i både uppgifts- och klientkoden. I aktivitetsläge använder du biblioteket för att spara filer. I klientläge använder du biblioteket för att lista och hämta filer. Aktivitetskoden kan också hämta utdata från överordnade aktiviteter med hjälp av biblioteket, till exempel i ett scenario med aktivitetsberoenden .

Om du vill hämta utdatafiler med filkonventionsbiblioteket letar du upp filerna för ett jobb eller en uppgift. Du behöver inte känna till filernas namn eller platser. I stället kan du lista filerna efter ID och syfte. Du kan till exempel visa en lista över alla mellanliggande filer för en viss uppgift. Du kan också hämta en förhandsgranskningsfil för ett visst jobb.

Från och med version 2017-05-01 har Batch-tjänst-API:et stöd för att spara utdata till Azure Storage för uppgifter och jobbhanterare som körs på pooler som skapats med konfigurationen för den virtuella datorn (VM). Du kan spara utdata inifrån koden som skapar en uppgift. Den här metoden är ett alternativ till filkonventionsbiblioteket. Du kan ändra dina Batch-klientprogram så att de bevarar utdata utan att behöva uppdatera programmet som aktiviteten körs på. För mer information, se Spara uppgiftsdata till Azure Storage med Batch-tjänstens API.

Användningsfall för bibliotek

Azure Batch innehåller flera sätt att spara aktivitetsutdata. Använd filkonventionsbiblioteket när du vill:

  • Ändra koden för programmet som aktiviteten körs för att spara filer.
  • Strömma data till Azure Storage medan uppgiften fortfarande körs.
  • Spara data från pooler.
  • Leta upp och ladda ned utdatafiler efter ID eller syfte i klientprogrammet eller andra uppgifter.
  • Visa aktivitetsutdata i Azure-portalen.

I andra scenarier kanske du vill överväga en annan metod. Mer information om andra alternativ finns i Behåll jobb- och uppgiftsutdata till Azure Storage.

Vad är Standard för Batch-filkonventioner?

Standarden Batch File Conventions innehåller ett namngivningsschema för målcontainrar och blobsökvägar som utdatafilerna skrivs till. Filer som sparats i Azure Storage och som följer standarden kan visas automatiskt i Azure-portalen.

Filkonventionsbiblioteket för .NET namnger automatiskt dina lagringscontainrar och aktivitetsutdatafiler enligt standarden. Biblioteket innehåller också metoder för att fråga utdatafiler i Azure Storage. Du kan fråga efter jobb-ID, aktivitets-ID eller syfte.

Om du utvecklar med ett annat språk än .NET kan du implementera filkonventionernas standard själv i ditt program. Mer information finns i Implementera Standard för Batch-filkonventioner.

Om du vill spara utdata till Azure Storage med hjälp av filkonventionsbiblioteket länkar du först ett Azure Storage-konto till ditt Batch-konto.

  1. Logga in på Azure-portalen.
  2. Sök efter och välj Batch i sökfältet.
  3. Välj det Batch-konto som ska länkas till Azure Storage.
  4. På sidan Batch-konto går du till Inställningar och väljer Lagringskonto.
  5. Om du inte redan har ett Azure Storage-konto kopplat till ditt Batch-konto väljer du Lagringskonto (Inget).
  6. Välj det Azure Storage-konto som ska användas. För bästa prestanda använder du ett konto i samma region som Batch-kontot.

Spara utdata

Du kan spara jobb- och uppgiftsutdata med filkonventionsbiblioteket. Skapa först en container i Azure Storage. Spara sedan utdata till containern. Använd Azure Storage-klientbiblioteket för .NET i aktivitetskoden för att ladda upp aktivitetsutdata till containern.

Mer information om hur du arbetar med containrar och blobar i Azure Storage finns i Komma igång med Azure Blob Storage med hjälp av .NET.

Alla jobb- och uppgiftsutdata som sparats med filkonventionsbiblioteket lagras i samma container. Om ett stort antal uppgifter försöker spara filer samtidigt kan Begränsningar för Azure Storage-begränsningar tillämpas. Mer information finns i checklista för prestanda och skalbarhet för Blob Storage.

Skapa lagringscontainer

Om du vill spara aktivitetsutdata till Azure Storage skapar du först en container genom att anropa CloudJob. PrepareOutputStorageAsync. Den här tilläggsmetoden tar ett CloudStorageAccount-objekt som en parameter. Metoden skapar en container med namnet enligt filkonventionernas standard. Containerns innehåll kan identifieras av Azure-portalen och de hämtningsmetoder som beskrivs i den här artikeln.

Skapa vanligtvis en container i klientprogrammet, vilket skapar dina pooler, jobb och uppgifter. Till exempel:

CloudJob job = batchClient.JobOperations.CreateJob(
    "myJob",
    new PoolInformation { PoolId = "myPool" });

// Create reference to the linked Azure Storage account
CloudStorageAccount linkedStorageAccount =
    new CloudStorageAccount(myCredentials, true);

// Create the blob storage container for the outputs
await job.PrepareOutputStorageAsync(linkedStorageAccount);

Lagra aktivitetsutdata

När du har skapat lagringscontainern kan aktiviteter spara utdata i containern med Hjälp av TaskOutputStorage. Den här klassen är tillgänglig i biblioteket Filkonventioner.

Skapa ett TaskOutputStorage-objekt i aktivitetskoden. När aktiviteten har slutfört sitt arbete anropar du TaskOutputStorage. SaveAsync-metod . Det här steget sparar utdata till Azure Storage.

CloudStorageAccount linkedStorageAccount = new CloudStorageAccount(myCredentials);
string jobId = Environment.GetEnvironmentVariable("AZ_BATCH_JOB_ID");
string taskId = Environment.GetEnvironmentVariable("AZ_BATCH_TASK_ID");

TaskOutputStorage taskOutputStorage = new TaskOutputStorage(
    linkedStorageAccount, jobId, taskId);

/* Code to process data and produce output file(s) */

await taskOutputStorage.SaveAsync(TaskOutputKind.TaskOutput, "frame_full_res.jpg");
await taskOutputStorage.SaveAsync(TaskOutputKind.TaskPreview, "frame_low_res.jpg");

Parametern kind för TaskOutputStorage.SaveAsync-metoden kategoriserar de sparade filerna. Det finns fyra fördefinierade TaskOutputKind-typer : TaskOutput, TaskPreview, TaskLogoch TaskIntermediate. Du kan också definiera anpassade utdatakategorier.

Ange vilken typ av utdata som ska listas när du frågar Batch senare. När du sedan listar utdata för en aktivitet kan du filtrera på någon av utdatatyperna. Filtrera till exempel på "Ge mig förhandsversionens utdata för uppgift 109". Mer information finns i Hämta utdata.

Utdatatypen avgör också var en utdatafil visas i Azure-portalen. Filer i kategorin TaskOutput finns under Utdatafiler för aktiviteten. Filer i kategorin TaskLog finns under Aktivitetsloggar.

Lagra jobbutdata

Du kan också lagra utdata som är associerade med ett helt jobb. I sammanslagningsuppgiften för ett filmrenderingsjobb kan du till exempel spara den helt renderade filmen som ett jobbutdata. När jobbet är klart kan klientprogrammet visa och hämta utdata för jobbet. Klientprogrammet behöver inte köra frågor mot de enskilda uppgifterna.

Lagra jobbutdata genom att anropa JobOutputStorage. SaveAsync-metod . Ange JobOutputKind och filnamnet. Till exempel:

CloudJob job = new JobOutputStorage(acct, jobId);
JobOutputStorage jobOutputStorage = job.OutputStorage(linkedStorageAccount);

await jobOutputStorage.SaveAsync(JobOutputKind.JobOutput, "mymovie.mp4");
await jobOutputStorage.SaveAsync(JobOutputKind.JobPreview, "mymovie_preview.mp4");

Precis som med typen TaskOutputKind för aktivitetsutdata använder du typen JobOutputKind för att kategorisera ett jobbs bevarade filer. Senare kan du ange en viss typ av utdata. Typen JobOutputKind innehåller både utdata- och förhandsgranskningskategorier. Typen har också stöd för att skapa anpassade kategorier.

Lagra aktivitetsloggar

Du kan också behöva spara filer som uppdateras under körningen av en uppgift. Du kan till exempel behöva spara loggfiler eller stdout.txt och stderr.txt. Biblioteket Filkonventioner innehåller TaskOutputStorage. SaveTrackedAsync-metoden för att bevara den här typen av filer. Spåra uppdateringar av en fil på noden med ett angivet intervall med SaveTrackedAsync. Spara sedan uppdateringarna i Azure Storage.

I följande exempel används SaveTrackedAsync för att uppdatera stdout.txt i Azure Storage var 15:e sekund under körningen av uppgiften:

TimeSpan stdoutFlushDelay = TimeSpan.FromSeconds(3);
string logFilePath = Path.Combine(
    Environment.GetEnvironmentVariable("AZ_BATCH_TASK_DIR"), "stdout.txt");

// The primary task logic is wrapped in a using statement that sends updates to
// the stdout.txt blob in Storage every 15 seconds while the task code runs.
using (ITrackedSaveOperation stdout =
        await taskStorage.SaveTrackedAsync(
        TaskOutputKind.TaskLog,
        logFilePath,
        "stdout.txt",
        TimeSpan.FromSeconds(15)))
{
    /* Code to process data and produce output file(s) */

    // We are tracking the disk file to save our standard output, but the
    // node agent may take up to 3 seconds to flush the stdout stream to
    // disk. So give the file a moment to catch up.
     await Task.Delay(stdoutFlushDelay);
}

Ersätt det kommenterade avsnittet Code to process data and produce output file(s) med den kod som din uppgift normalt gör. Du kan till exempel ha kod som laddar ned data från Azure Storage och sedan utför transformeringar eller beräkningar. Du kan omsluta den här koden i ett using block för att regelbundet uppdatera en fil med SaveTrackedAsync.

Nodagenten är ett program som körs på varje nod i poolen. Det här programmet tillhandahåller kommando- och kontrollgränssnittet mellan noden och Batch-tjänsten. Anropet Task.Delay krävs i slutet av det här using blocket. Anropet ser till att nodagenten har tid att tömma innehållet i standard till stdout.txt filen på noden. Utan den här fördröjningen går det att missa de sista sekunderna av utdata. Du kanske inte behöver den här fördröjningen för alla filer.

När du aktiverar filspårning med SaveTrackedAsyncsparas endast tillägg till den spårade filen i Azure Storage. Använd endast den här metoden för att spåra icke-roterande loggfiler eller andra filer som skrivs till med tilläggsåtgärder i slutet av filen.

Hämta utdata

Om du vill hämta utdatafiler för en viss uppgift eller ett visst jobb behöver du inte känna till sökvägen i Azure Storage eller filnamnen. I stället kan du begära utdatafiler efter aktivitets- eller jobb-ID.

Följande exempelkod itererar genom ett jobbs uppgifter. Därefter skriver koden ut viss information om utdatafilerna för uppgiften. Sedan laddar koden ned filerna från AzureStorage.

foreach (CloudTask task in myJob.ListTasks())
{
    foreach (OutputFileReference output in
        task.OutputStorage(storageAccount).ListOutputs(
            TaskOutputKind.TaskOutput))
    {
        Console.WriteLine($"output file: {output.FilePath}");

        output.DownloadToFileAsync(
            $"{jobId}-{output.FilePath}",
            System.IO.FileMode.Create).Wait();
    }
}

Visa filerna för utdata i Azure-portalen

Om dina aktivitetsutdatafiler använder Standard för Batch-filkonventioner kan du visa filerna i Azure-portalen.

Om du vill aktivera visning av utdatafilerna i portalen måste du uppfylla följande krav:

För att utdatafiler ska visas automatiskt i Azure-portalen måste du:

  1. Länka ett Azure Storage-konto till ditt Batch-konto.
  2. Följ de fördefinierade namngivningskonventionerna för Azure Storage-containrar och -filer. Granska README för alla definitioner. Om du använder filkonventionsbiblioteket för att spara dina utdata sparas filerna enligt filkonventionernas standard.

Så här visar du aktivitetsutdatafiler och loggar i Azure-portalen:

  1. Logga in på Azure-portalen.
  2. Gå till den uppgift som du vill visa utdata för.
  3. Välj antingen Sparade utdatafiler eller Sparade loggar.

Kodexempel

Exempelprojektet PersistOutputs är ett av Azure Batch-kodexemplen på GitHub. Den här Visual Studio-lösningen visar hur du använder Azure Batch File Conventions-biblioteket för att spara aktivitetsutdata till beständig lagring. Följ dessa steg för att köra exemplet:

  1. Öppna projektet i Visual Studio 2019.
  2. Lägg till dina autentiseringsuppgifter för Batch- och Azure Storage-kontot i AccountSettings.settings i projektet Microsoft.Azure.Batch.Samples.Common .
  3. Skapa lösningen. Kör inte lösningen än.
  4. Om du uppmanas att göra det återställer du alla NuGet-paket.
  5. Ladda upp ett programpaket för PersistOutputsTask via Azure-portalen.
    1. Inkludera den PersistOutputsTask.exe körbara filen och dess beroende sammansättningar i .zip-paketet.
    2. Ange program-ID till PersistOutputsTask.
    3. Ange programpaketversionen till 1.0.
  6. Välj Starta för att köra projektet.
  7. När du uppmanas att välja den beständighetsteknik som ska användas anger du 1. Det här alternativet kör exemplet med hjälp av filkonventionsbiblioteket för att spara aktivitetsutdata.

Hämta batchfilkonventionsbiblioteket för .NET

Batch File Conventions-biblioteket för .NET är tillgängligt på NuGet. Biblioteket utökar klasserna CloudJob och CloudTask med nya metoder. Mer information finns i referensdokumentationen för filkonventionsbiblioteket.

Källkoden för filkonventionsbiblioteket är tillgänglig på GitHub.

Nästa steg